【问题标题】:OnTouchEvent: I want to recognize touches while moving with an another finger on the screenOnTouchEvent:我想在屏幕上用另一根手指移动时识别触摸
【发布时间】:2019-12-10 16:49:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android touch-event


    【解决方案1】:

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

    【讨论】:

    • 解决不了问题。我已经尝试了代码,但问题仍然存在。现在我不能做我发现的事情。这样当我同时触摸两半时。
    【解决方案2】:

    所以我自己找到了解决办法。

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

    这对我的问题有效。比我想象的要容易。

    【讨论】:

      猜你喜欢
      • 2022-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多