![](/img/trans.png)
[英]OnTouchListener ACTION_MOVE is not working while moving finger on the screen
[英]OnTouchEvent: I want to recognize touches while moving with an another finger on the screen
我正在嘗試開發自己的游戲。 但是我對 onTouchEvent-Method 有問題。 在顯示我的代碼之前很少解釋。 我希望能夠用手指控制飛行。 它應該始終跟隨我的手指。 為此,我實現了 MotionEvent.ACTION_MOVE 案例。 飛行只能在屏幕左側移動。 當我觸摸屏幕右側時,它應該會發射子彈。 並且應該可以同時飛來飛去和射擊。 這是我的代碼:
public boolean onTouchEvent(MotionEvent event) {
int maskedaction= event.getActionMasked();
switch (maskedaction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (event.getX() > screenX / 2 && flight.toShoot == 0) {
flight.toShoot++;
}
break;
case MotionEvent.ACTION_MOVE: {
if (event.getX() < screenX / 2 - 100) {
flight.x = (int) event.getX() - 100;
flight.y = (int) event.getY() - 50;
}
break;
}
}
return true;
}
這就是代碼。 當我觸摸屏幕的左半部分時,我可以和飛機一起飛來飛去。 當我觸摸右側時,我可以射擊。 但我不能同時做。 我想先觸摸左半邊然后飛來飛去。 通過點擊右側,同時我在左側移動我的手指,它應該射出一顆子彈。
我發現當我用一根手指同時點擊兩側時,飛機會射出一顆子彈。 如果我現在松開右手手指(觸摸屏幕時射擊的手指),我可以四處飛行,而在四處飛行時,我可以同時射擊。
您可以通過檢測 ID 來檢測您的觸摸, https://developer.android.com/training/gestures/multi
你可以這樣做:
int leftSideId = 0;
int rightSideId = 1;
public boolean onTouchEvent(MotionEvent event) {
int maskedaction= event.getActionMasked();
// Get the pointer ID
int mActivePointerId = event.getPointerId(0);
switch (maskedaction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (event.getX() > screenX / 2) {
rightSideId = mActivePointerId;
if(flight.toShoot == 0){
flight.toShoot++;
}
}else{
leftSideId = mActivePointerId;
}
break;
case MotionEvent.ACTION_MOVE: {
if (event.getX() < screenX / 2 - 100) {
if (mActivePointerId == leftSideId) {
flight.x = (int) event.getX() - 100;
flight.y = (int) event.getY() - 50;
}
}
break;
}
}
return true;
}
所以我自己找到了解決方案。
public boolean onTouchEvent(MotionEvent event){
int amount=event.getPointerCount();
for (int i=0; i<amount; i++) {
float x = event.getX(i);
float y = event.getY(i);
if (x>screenX/2 && flight.toShoot==0){
flight.toShoot++;
}
if (x<screenX/2 -100 && flyingenabled)
{
flight.x = (int) x - 100;
flight.y = (int) y - 50;
}
}
return true;
}
那是為我的問題工作。 比我想象的要容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.