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
Es ist nicht sehr einfach, Ihnen zu folgen, aber normalerweise passieren solche Dinge, wenn etwas mit dem Initialisierungscode nicht stimmt. –
@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
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