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
我刚试过这个,可悲的是它没有工作。我不确定还有什么我可以发布代码明智的,没有其他任何东西在这里使用任何东西。当ACTION_MOVE发生时,是否像使用其他方式一样获得了event.getX()的新点?我想这可能是问题,但它适用于主指针,这就是为什么我感到困惑。 – WWaldo
case MotionEvent.ACTION_DOWN:你没有为这种情况写任何东西。如果交换机与它匹配会发生什么。我知道switch语句执行所有其他情况,如果它不匹配后中断,无论接下来的情况如何 – Rasel
一个人的方式就像一个if语句,如果发生任何一种情况,它就会执行下面的代码 – WWaldo