Мультитач Игра управляет Android - PullRequest
0 голосов
/ 09 июля 2011

Это то, что не относится конкретно к программированию игр, поэтому я спрашиваю здесь.По сути, у меня есть этот код:

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

Что кто-то еще дал мне, сказав, что это исправит мою первоначальную проблему, заключающуюся в том, что, если я опущу первичный указатель, все будет в порядке, и то же самое для вторичного указателя,но независимо от того, какой первый палец отпущен, он считается вторичным указателем, но он поднимает еще одну проблему, которую я не могу понять по какой-то причине.Своего рода рано здесь, так что это способствует, но все же.

Проблема, с которой я столкнулся с этим кодом, заключалась в том, что если первичный и вторичный указатели оба не работают, и любой из них освобожден, он активирует оба случая, так что «Первичное повышение» и «Вторичное повышение»выходной, второй выпущенный будет распознавать, какой это, если оба случая сработают до того, как я доберусь туда, тогда это не будет иметь значения.Есть идеи как починить что то подобное?Или другой способ сделать мультитач для игры, или что-нибудь в этом роде.Спасибо!

WWaldo

1 Ответ

1 голос
/ 09 июля 2011

Насколько я знаю, 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

чтобы получить индекс действия.

...