OnTouchEvent:我想在另一个手指在屏幕上移动时识别触摸

时间:2019-12-10 16:49:18

标签: java android touch-event

我正在尝试开发自己的游戏。但是我的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;
}

这就是代码。当我触摸屏幕的左半部分时,我可以随飞机飞行。当我触摸右侧时,我可以射击。但是我不能同时做。我想先触摸左半部分然后飞来飞去。通过单击右侧,同时我在左侧移动手指,它应该会发射子弹。

我发现,当我用一根手指同时单击两侧时,飞机会发射一颗子弹。如果现在放开右手指(触摸屏幕时会射击的手指),我可以飞来飞去,而当我飞来飞去时,我可以同时射击。

2 个答案:

答案 0 :(得分:0)

您可以通过检测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;
    }

答案 1 :(得分:0)

所以我自己找到了解决方案。

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;
} 

那可以解决我的问题。比我想象的要容易。