Action_Move Android问题

时间:2011-07-17 13:50:31

标签: java android

我一直在做一个游戏,现在我正在进行控制,我正在使用Action_Move遇到问题。我的代码设置如下所示。

for(int i = 0; i < event.getPointerCount(); i++)
            {
                if(event.getPointerId(i) == 0 && primDown)
                {
                    x = (int) event.getX();
                    y = (int) event.getY();
                }
                else if(event.getPointerId(i) == 1 && secDown)
                {
                    x1 = (int) event.getX(1);
                    y1 = (int) event.getY(1);
                    if(dirPadRight.contains(x1, y1))
                    {
                        Log.w("game", "Right " + x1 +" " + y1);
                    }
                    if(dirPadLeft.contains(x1, y1))
                    {
                        Log.w("game", "Left " + x1 +" " + y1);
                    }
                }
            }

primDown和secDown布尔值在下面的switch语句中设置:

int index = event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT;
            int pointerId = event.getPointerId(index);

            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_POINTER_DOWN:
                if(pointerId == 0)
                {
                    primDown = true;
                }
                else if(pointerId == 1)
                {
                    secDown = true;
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
                if(pointerId == 0)
                {
                    x = 0;
                    y = 0;
                    primDown = false;
                }
                else if(pointerId == 1)
                {
                    x1 = 0;
                    y1 = 0;
                    secDown = false;
                }                      
                break;
            }

基本上,我只是在任何动作发生时刷新x,y,x1和y1,这样我就不必在switch语句中处理ACTION_MOVE,但是当我尝试使用辅助动作时指针,它不会更改event.getX(1)或event.getY(1)。你可以看到,我将日志语句放入我的for循环的第二个指针部分,然后它们关闭我是否主要指针向下和次要向下,或者如果我已经提起主指针而只是辅助是向下,但它没有改变x1或y1,它不断输出原始点。

有谁知道为什么这对我不起作用?很奇怪,它知道一个运动正在发生,但它只是没有改变x和y,所以我想有人会在这里知道。如果您需要更多代码,请告诉我们。提前谢谢!

WWaldo

1 个答案:

答案 0 :(得分:0)

试试这个

if(pointerId == 0)
                {
                    primDown = true;
                    secDown=false;
                }
                else if(pointerId == 1)
                {
                    secDown = true;
                    primDown=false;
                }

很难说在没有看到所有代码的情况下导致问题的原因。可能是你搞乱了布尔变量,这样每当代码工作时它都无法正常工作。