이상한 문제가 있습니다. 내가 응용 프로그램에 대한 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 해결 과정
는 내가 해결 방법의 종류를 만든이 부분에 얻을 수 없다. 시간 관리를 추가했습니다. 나는 마지막 제스처 인식의 코드와 타임 스탬프를 호출하는 타임 스탬프를 비교하고있다. 너무 빠르면 (불가능한 몇 센티미터 정도) 나는 화살을 맞출 수 없다. 나는 그것이 완벽한 해결책인지 확실하지 않지만 작동하는 솔루션이다.
매우 쉽게 따라 할 수는 없지만 일반적으로 초기화 코드에 문제가있을 때 이러한 일이 발생한다. –
@AndriyBuday 문제를 일으키기가 어렵다. 문제는 이상하고 어렵다. 더 많은 정보가 필요하면 필요한 것을 말하면 추가하겠습니다. 초기화에 관하여. ArrayList는 프로그램 시작시 초기화됩니다. private 목록 _history = new List (16); 그 밖의 것은 없습니다 –
Fixus
전환을 표시하기 위해 코드를 붙여야합니다.또한, 문제가 init 코드에있을 가능성이 있기 때문에, 거기에 넣은 것을 요약 할 수 있습니까? – PPC