2011-07-17 40 views
0

我一直在做一个游戏一段时间,而且我正在对控件进行操作,并且正在处理Action_Move的一个问题。我的代码设置如下所示。Action_Move Android问题

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

回答

0

尝试这样

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

这很难说没有看到所有的code.May被你与布尔变量搞乱了什么造成您的问题,这样每当代码应工作不起作用。

+0

我刚试过这个,可悲的是它没有工作。我不确定还有什么我可以发布代码明智的,没有其他任何东西在这里使用任何东西。当ACTION_MOVE发生时,是否像使用其他方式一样获得了event.getX()的新点?我想这可能是问题,但它适用于主指针,这就是为什么我感到困惑。 – WWaldo

+0

case MotionEvent.ACTION_DOWN:你没有为这种情况写任何东西。如果交换机与它匹配会发生什么。我知道switch语句执行所有其他情况,如果它不匹配后中断,无论接下来的情况如何 – Rasel

+0

一个人的方式就像一个if语句,如果发生任何一种情况,它就会执行下面的代码 – WWaldo