2012-04-09 5 views
3

이상한 문제가 있습니다. 내가 응용 프로그램에 대한 NUI를 만들고있어 그리고 오른쪽 화살표와 왼쪽 화살표에 간단한 제스처를 바인딩. 문제는 응용 프로그램을 시작할 때입니다. 처음으로 제스처를 만들 때 응용 프로그램이 두 번 연속으로 실행됩니다. 그 후 그것은 내가 원하는대로 100 % 작동합니다. 시작 만 문제입니다.중단 명령 후 루프 안의 여러 히트

나는 그것이 바로 내가 안타 내가 비교하고있어 foreach 루프에서

 this._history.Add(new HistoryItem() 
      { 
       timestamp = timestamp, 
       activeHand = hand, 
       controlJoint = controlJoint 
      } 
     ); 

다음의 ArrayList에 데이터

if (Math.Abs((hand.Position.X - item.controlJoint.Position.X)) < MainWindow.treshold && Math.Abs((hand.Position.Y - item.controlJoint.Position.Y)) < MainWindow.verticalTreshold) 

을 넣어 내 역사 구조체에 두 개의 관절과 타임 스탬프를 추가 해요 롭을 깨기

break; 

그 후 나는 역사를 지운다. ArrayList

this._history.Clear(); 

그래서 알 수 없습니다. 왜 시작 후 두 번 연속으로 안타?

foreach (HistoryItem item in this._history) 
     { 
     if ((hand.Position.X - item.controlJoint.Position.X) < MainWindow.treshold) 
          { 
           float tmp = (hand.Position.X - controlJoint.Position.X); 
           MainWindow.slideNumber++; 
           this._logger.Log("Next slide: " + MainWindow.slideNumber); 
           this._logger.Log(hand.Position.X + " - " + controlJoint.Position.X + " = " + tmp + " | " + MainWindow.treshold); 
           this.startTime = 0; 
           this.gestureStart = false; 
           answerFlag = true; 
           System.Windows.Forms.SendKeys.SendWait("{Right}"); 
           break; 
          } 
       } 

이제 루프에서

// 편집

역사 ArrayList를 초기화

private List<HistoryItem> _history = new List<HistoryItem>(16); 

. 보시다시피 저는 여기서 깨고 있습니다. 그래서이 코드는이 뭔가를 지 웁니다 어떻게 행

에서 두 번째로 호출 할 수 없습니다해야

// 나는 또한 코드 gestureStart 플래그 필요성이 부분에 들어갈 것을 추가 할 것 2

편집 true로 설정됩니다. 여기서 'if'부분에 들어가서 알 수 있듯이, 나는 거짓으로 설정합니다. 그래서 코드가 즉시

// 편집 3 WORKING 해결 과정

는 내가 해결 방법의 종류를 만든이 부분에 얻을 수 없다. 시간 관리를 추가했습니다. 나는 마지막 제스처 인식의 코드와 타임 스탬프를 호출하는 타임 스탬프를 비교하고있다. 너무 빠르면 (불가능한 몇 센티미터 정도) 나는 화살을 맞출 수 없다. 나는 그것이 완벽한 해결책인지 확실하지 않지만 작동하는 솔루션이다.

+0

매우 쉽게 따라 할 수는 없지만 일반적으로 초기화 코드에 문제가있을 때 이러한 일이 발생한다. –

+0

@AndriyBuday 문제를 일으키기가 어렵다. 문제는 이상하고 어렵다. 더 많은 정보가 필요하면 필요한 것을 말하면 추가하겠습니다. 초기화에 관하여. ArrayList는 프로그램 시작시 초기화됩니다. private 목록 _history = new List (16); 그 밖의 것은 없습니다 – Fixus

+0

전환을 표시하기 위해 코드를 붙여야합니다.또한, 문제가 init 코드에있을 가능성이 있기 때문에, 거기에 넣은 것을 요약 할 수 있습니까? – PPC

답변

1

내 문제는 코드였다. Ofc 디버그에서 untracable 작은 버그. 나는 하나의 함수를 사용하여 프레임의 역사를 분석했다.

이 방법은 2 가지 모드로 작동합니다. 나는 그것을 분리하고 각 작업마다 두 가지 다른 방법을 만들었고 이제는 효과가있다.