我的遊戲輸入有問題。在我的遊戲中,有一個遊戲杆和兩個按鈕。我已經覆蓋了onTouchEvent方法的輸入。 onTouchEvent更改了類中另一個方法處理的一些變量。onTouchEvent在多點觸摸上的錯誤座標android
@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的錯誤座標。當移動操縱桿時,它也會影響按鈕。
我的代碼有什麼問題?任何幫助/建議,將不勝感激。
什麼會是V? – Increditastic
你已經設置觸摸監聽器的視圖 – Arslan
但我的觀點是SurfaceView,感謝的方式 – Increditastic