2016-04-25 8 views
2

私はlibgdxでスワイプを検出する方法を知っていますが、特定の方向にスワイプすると問題が発生します.btwでは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を使って斜めにスワイプすると、上下左右の2つの方向を検出するので、ポインタがどの方向に向いているかを検出することです。私の場合、ユーザーが斜めにスワイプする場合は、上下のジェスチャーとしてのみ検出され、左右のスワイプは含まれません。

更新:

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」をチェックする必要があります。ところで、物事が立てば、 '&& velocityX> 0'は 'else if'では常にfalseです - もしそれが真であれば、最初の条件と一致していました。 –

+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> = 0の場合はx、 x <0の場合は-x)。 –

答えて

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についても同様です。

これは、基本的に、方向空間を、vy = vxvy = -vxで分割された4つの象限に分割することに注意してください。

enter image description here

関連する問題