2016-04-25 23 views
2

Ich weiß, wie man swiping in libgdx erkennt, aber ich habe ein Problem, wenn ich in eine bestimmte Richtung wische, btw verwende ich GestureListener.Wie erkennt man die Wischrichtung in Libgdx?

Grundsätzlich passiert, wenn ich nach oben oder unten wische, wird manchmal "richtig" ausgedruckt. Ich möchte herausfinden, in welche Richtung der Zeiger geht, denn wenn Sie velocityX und velocityY verwenden, dann wischen Sie diagonal und es werden zwei Richtungen erkannt, die oben und rechts oder unten und rechts sind. In meinem Fall sollte der Benutzer, wenn er diagonal streicht, nur als eine Auf- oder Ab-Geste erkannt werden, und er sollte kein Wischen nach links und rechts umfassen.

Update:

if(Math.abs(velocityY) > Math.abs(velocityX)){ 
      if(velocityY > 0) 
       System.out.println("down"); 
      else if(velocityY < 0) 
       System.out.println("up"); 
     }else if(Math.abs(velocityX) > Math.abs(velocityY)) 
      if(velocityX > 0) 
       System.out.println("right"); 

es im Grunde aus Richtung drucken, die

+0

Sie müssen 'velocityY' im ersten Zustand zu überprüfen. Übrigens ist '&& velocityX> 0 'in der, Sache' immer falsch im' else if' - es wäre mit der ersten Bedingung übereinstimmend gewesen, wenn es wahr wäre. –

+0

@Andy Turner - was ist .abs() Methode? weil ich es ausprobiert habe und es mir den gleichen Wert gibt, zum Beispiel: velocityY und Math.abs (velocityY) haben den gleichen Wert. –

+0

[Javadoc] (https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#abs (double)): es gibt den absoluten Wert zurück (x wenn x> = 0; -x wenn x <0). –

Antwort

5

Das erste, was Sie sich entscheiden, tun können, größer ist als die andere Richtung ist, wenn die Bewegung „mehr links-rechts ist "oder‚mehr up-down‘:

if (Math.abs(velocityX) > Math.abs(velocityY)) { 
    // More left-right. 
} else { 
    // More up-down. 
} 

Dann holen Sie die, die‚mehr‘-Richtung ist, zum Beispiel in dem‚mehr links-rechts‘Block in der Bedingung: Ähnlich

if (velocityX >= 0) { 
    System.out.println("Right"); 
} else { 
    System.out.println("Left"); 
} 

für velocityY.

Beachten Sie, dass dies im Wesentlichen den Richtungsraum in 4 Quadranten unterteilt, unterteilt in die Linien vy = vx und vy = -vx.

enter image description here

Verwandte Themen