这不是具体的游戏编程内容,这就是我在这里问的原因。基本上,我有这个代码:
for (int i = 0; i < event.getPointerCount(); i++) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if(event.getPointerId(i) == 0)
{
Log.d("Game", "Primary Down");
}
else if(event.getPointerId(i) == 1)
{
Log.d("Game", "Secondary Down");
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
if(event.getPointerId(i) == 0)
{
Log.d("Game", "Primary Up");
}
else if(event.getPointerId(i) == 1)
{
Log.d("Game", "Secondary Up");
}
break;
}
}
其他人给我说它会解决我的原始问题,即如果我放下主指针它会没问题,对于辅助指针也一样,但无论释放的第一个手指被认为是辅助指针,但它带来了另一个问题,我似乎无法弄清楚出于某种原因。它早在这里,所以有贡献,但仍然。
我遇到这个代码的问题是,如果主指针和辅助指针都已关闭,并且其中任何一个都被释放,它会激活这两种情况,因此输出“Primary Up”和“Secondary Up”,第二个被释放将识别它是哪一个,如果在我到达那里之前两个案件都没有,那么那个时候就没关系了。知道如何解决这样的问题吗?或者为游戏进行多点触控的另一种方式,或者其他任何事情。谢谢!
WWaldo
答案 0 :(得分:1)
据我所知,对于每个指针,ACTION_UP和ACTION_POINTER_UP(以及XX_DOWN相同......)只被调用一次。所以你不需要做那种特殊的处理,只需使用event.getX()和event.getY()。要获得相应的pointerId,您应该使用
int index = event.getActionIndex();
int pointerId = event.getPointerId(index);
我使用for循环的唯一时间是ACTION_MOVE事件,该事件的调用与指针移动无关(在这种情况下,你确实需要使用pointerId,getX(i)和getY(i))
edit:getActionIndex仅在API 8中添加,因此您可能希望使用
event.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT
获取动作索引。