2016-04-25 47 views
2

我知道如何檢測在libgdx中刷卡,但我有一個問題,當我滑動到某個方向,順便說一句我使用GestureListener。如何檢測Libgdx中的滑動方向?

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

基本上發生了什麼是當我向上或向下滑動時它有時打印輸出「正確」。我想要發生的是檢測指針在哪個方向上,因爲如果你使用velocityX和velocityY,那麼你可以對角滑動,它會檢測到兩個向上和向右或向下的方向。在我的情況下,如果用戶對角滑動,它應該只被檢測爲向上或向下的手勢,並且不應該包括左右滑動。

更新:

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"); 

就基本打印出比其他方向

+0

您需要在第一個條件中檢查'velocityY'。順便說一句,在'else if'中'&& velocityX> 0'總是錯誤的 - 如果它是真的,它將與第一個條件相匹配。 –

+0

@Andy Turner - 什麼是.abs()方法?因爲我試過了,它給了我相同的值,例如:velocityY和Math.abs(velocityY)具有相同的值。 –

+0

[Javadoc](https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#abs(double)):它返回絕對值(x如果x> = 0; -x如果x <0)。 –

回答

5

你可以做的第一件事是決定如果運動「更左右更大的方向「或‘較上下’:

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

然後,你選擇其中的‘’這是方向,例如,在‘更在多個左右’塊有條件:

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

同樣對於velocityY

請注意,這基本上將方向空間劃分爲4個象限,分爲vy = vxvy = -vx

enter image description here