【问题标题】:How to detect swipe direction in Libgdx?如何检测 Libgdx 中的滑动方向?
【发布时间】:2016-04-25 17:03:33
【问题描述】:

我知道如何检测 libgdx 中的滑动,但是当我向某个方向滑动时遇到问题,顺便说一句,我使用 GestureListener。

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

它基本上打印出大于另一个方向的方向

【问题讨论】:

  • 第一个条件需要勾选velocityY。顺便说一句,就目前情况而言,&amp;&amp; velocityX &gt; 0else if 中始终为假-如果为真,它将与第一个条件匹配。
  • @Andy Turner - 什么是 .abs() 方法?因为我试过了,它给了我相同的值,例如:velocityY 和 Math.abs(velocityY) 具有相同的值。
  • Javadoc:返回绝对值(x if x >= 0; -x if x

标签: java libgdx


【解决方案1】:

您可以做的第一件事是确定运动是“更左右”还是“更上下”:

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 行处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多