2012-04-09 6 views
3

Ich habe ein seltsames Problem. Ich erstelle ein NUI für die Anwendung und ich verbinde einige einfache Gesten mit dem Pfeil nach rechts und nach links. Das Problem ist, wenn ich die Anwendung starte. Wenn ich zum ersten Mal eine Geste mache, schlägt meine Anwendung zweimal hintereinander. Danach funktioniert es 100% wie ich will. Nur der Anfang ist das Problem.mehrere Treffer in der Schleife nach dem Break-Befehl

Ich füge zwei Gelenke und Zeitstempel zu meiner Geschichte Struktur, die in der Arraylist gesetzt wird

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

dann in foreach-Schleife Ich vergleiche Daten

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

Wenn ich trifft sofort brechen die lopp mit

break; 

nach, dass ich die Geschichte Arraylist löschen

this._history.Clear(); 

Also ich verstehe es nicht. Warum nach dem Start trifft es zweimal hintereinander?

// bearbeiten

Geschichte Arraylist Initialisierung

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

in Schleife

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; 
          } 
       } 

Jetzt. Wie du sehen kannst, brich ich hier. So soll dieser Code nicht zweites Mal in Folge

aufgerufen werden, wie dies etwas

löscht // edit 2

ich auch, dass in diesen Teil des Codes zu erhalten hinzufügen werde die gestureStart Flagge Notwendigkeit auf wahr gesetzt werden. Wie Sie sehen können, nachdem ich in den 'if' Teil gekommen bin, setze ich es auf false. So ist es unmöglich, dass der Code sofort zu diesem Teil bekommen kann

// bearbeiten 3 ARBEITS Abhilfe

ich irgendwie Abhilfe geschaffen haben. Ich habe die Zeitkontrolle hinzugefügt. Ich vergleiche Timestamp des Aufrufs des Codes und Timestamp der letzten Gestenerkennung. Wenn es zu schnell ist (ich meen Paar von ms, die es unmöglich machen), ich erlaube nicht, einen Pfeil zu schlagen. Ich bin mir nicht sicher, ob es eine perfekte Lösung ist, aber es ist eine funktionierende Lösung

+0

Es ist nicht sehr einfach, Ihnen zu folgen, aber normalerweise passieren solche Dinge, wenn etwas mit dem Initialisierungscode nicht stimmt. –

+0

@AndriyBuday es ist schwer zu bremsen, weil das Problem seltsam ist und es schwer zu beschreiben ist. Wenn Sie mehr Informationen benötigen, sagen Sie einfach, was Sie brauchen, und ich werde versuchen, es hinzuzufügen. Über die Initialisierung. ArrayList werden beim Start des Programms initialisiert: private Liste _history = new Liste (16); nichts anderes – Fixus

+0

Sie sollten wahrscheinlich ein wenig mehr Code einfügen, um die Übergänge anzuzeigen.Da das Problem wahrscheinlich im Init-Code liegt, könnten Sie dann zusammenfassen, was Sie dort eingegeben haben? – PPC

Antwort

1

Ok mein Problem war der Code. Ofc ein kleiner Fehler, der im debug nicht erkannt werden kann. Ich habe eine Funktion verwendet, um eine Geschichte von Frames zu analysieren.

Die Methode funktionierte in 2 Modi. Ich habe das gelöst und 2 verschiedene Methoden für jede Aufgabe erstellt und jetzt funktioniert es großartig