【发布时间】:2017-11-07 12:06:01
【问题描述】:
我正在使用 Android Studio 2.3.2 在 Android 上对 Snake 进行编程
为了移动蛇,我制作了一个 onTouchListener 来检测用户是否在滑动以及朝哪个方向(北、南、东、西)滑动
下面是View.onTouchListener的onTouch方法:
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
prevX = event.getX();
prevY = event.getY();
break;
case MotionEvent.ACTION_UP:
float newX = event.getX();
float newY = event.getY();
//Calculates where we swiped
if (Math.abs(newX - prevX) > Math.abs(newY - prevY)) {
//LEFT - RiGHT Direction
if( newX > prevX) {
//RIGHT
gameEngine.updateDirection(Direction.East);
} else {
//LEFT
gameEngine.updateDirection(Direction.West);
}
} else {
// UP-DOWN Direction
if (newY > prevY) {
//DOWN
gameEngine.updateDirection(Direction.South);
} else {
//UP
gameEngine.updateDirection(Direction.North);
}
}
break;
}
return false;
}
问题在于它只检测 LEFT 和 RIGHT(即 EAST 和 WEST)。 而且我不知道为什么没有检测到 UP 和 DOWN。
【问题讨论】:
-
这与你的 onTouchListener() 无关,你的计算不符合要求。
if (Math.abs(newX - prevX) > Math.abs(newY - prevY))似乎总是正确的。第二种情况,newY>prevY然后newY总是更大.... -
@Opiatefuchs 好的,问题是我不明白为什么它总是正确的,因为当我沿 y 轴滑动时,它应该比 x 轴具有更高的值。因为我在 x 轴上向上/向下滑动时的差异应该接近于零。
-
通常您只需比较 x 轴的 prevX 和 newX 以及 prevY 和 newY。为什么要比较 x 轴和 y 轴?
-
标签: android 2d android-canvas ontouchlistener ontouch