【发布时间】:2015-12-02 06:38:56
【问题描述】:
我的游戏输入有问题。在我的游戏中,有一个操纵杆和两个按钮。我已经覆盖了输入的 onTouchEvent 方法。 onTouchEvent 改变了类中另一个方法处理的一些变量。
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean touched = false;
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_DOWN:
touched = true;
if ((event.getX() < Constants.JOYSTICK_SIZE * Data.density) && (event.getY() > (Data.height - Constants.JOYSTICK_SIZE * Data.density))) {
xPos = Math.round(event.getX());
yPos = Math.round(event.getY());
joystickPressed = true;
}
if ((event.getX() > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY() > (Data.height - Constants.BUTTON_SIZE * Data.density))) {
button1Pressed = true;
}
if ((event.getX() > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY() > (Data.height - Constants.BUTTON_SIZE * Data.density * 2 - 20 * Data.density)) && (event.getY() < (Data.height - Constants.BUTTON_SIZE * Data.density - 20 * Data.density))) {
button2Pressed = true;
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
touched = true;
if ((event.getX(event.getActionIndex()) < Constants.JOYSTICK_SIZE * Data.density) && (event.getY(event.getActionIndex()) > (Data.height - Constants.JOYSTICK_SIZE * Data.density))) {
xPos = Math.round(event.getX());
yPos = Math.round(event.getY());
joystickPressed = true;
}
if ((event.getX(event.getActionIndex()) > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY(event.getActionIndex()) > (Data.height - Constants.BUTTON_SIZE * Data.density))) {
button1Pressed = true;
}
if ((event.getX(event.getActionIndex()) > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY(event.getActionIndex()) > (Data.height - Constants.BUTTON_SIZE * Data.density * 2 - 20 * Data.density)) && (event.getY() < (Data.height - Constants.BUTTON_SIZE * Data.density - 20 * Data.density))) {
button2Pressed = true;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if ((event.getX() > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY() > (Data.height - Constants.BUTTON_SIZE * Data.density))) {
button1Pressed = false;
} else if ((event.getX() > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY() > (Data.height - Constants.BUTTON_SIZE * Data.density * 2 - 20 * Data.density)) && (event.getY() < (Data.height - Constants.BUTTON_SIZE * Data.density - 20 * Data.density))) {
button2Pressed = false;
} else {
xPos = Math.round(Constants.JOYSTICK_SIZE / 2 * Data.density);
yPos = Math.round(Data.width - Constants.JOYSTICK_SIZE / 2 * Data.density);
joystickPressed = false;
}
break;
case MotionEvent.ACTION_POINTER_UP:
if ((event.getX(event.getActionIndex()) > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY(event.getActionIndex()) > (Data.height - Constants.BUTTON_SIZE * Data.density))) {
button1Pressed = false;
} else if ((event.getX(event.getActionIndex()) > Data.width - Constants.BUTTON_SIZE * Data.density) && (event.getY(event.getActionIndex()) > (Data.height - Constants.BUTTON_SIZE * Data.density * 2 - 20 * Data.density)) && (event.getY() < (Data.height - Constants.BUTTON_SIZE * Data.density - 20 * Data.density))) {
button2Pressed = false;
} else {
xPos = Math.round(Constants.JOYSTICK_SIZE / 2 * Data.density);
yPos = Math.round(Data.width - Constants.JOYSTICK_SIZE / 2 * Data.density);
joystickPressed = false;
}
break;
}
return touched || super.onTouchEvent(event);
}
但是似乎有问题。当屏幕上只有一个指针或首先按下操纵杆时,代码可以正常工作。但是,当第一次按下其中一个按钮时,代码似乎为操纵杆的 xPos 和 yPos 提供了错误的坐标。此外,当操纵杆移动时,它似乎会影响按钮。
我的代码有什么问题?任何帮助/建议将不胜感激。
【问题讨论】:
标签: android touch-event