Множественный ввод пальцем для развития Android - PullRequest
0 голосов
/ 13 апреля 2011

После запуска приложения калькулятора я решил попробовать создать понг. В центре есть коробка и две лопасти с обоих концов. Телефон в горизонтальном положении. У меня коробка отскакивает от стен, и весло движется, и я опускаю палец вниз. Моя проблема в том, что я хочу сделать так, чтобы в нем было два игрока, и я хочу, чтобы в игре было несколько пальцев. Я хочу, чтобы один палец двигал весло 1, а другой - чтобы весло 2. Пока это мой входной код

@Override
 public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action) {

        case MotionEvent.ACTION_MOVE: {
            // Find the index of the active pointer and fetch its position



           float p1y = ev.getY();

            if(ev.getX()<300)
            {
              player1y = p1y;
            }
            if(ev.getX()>300)
            {
              player2y = p1y;
            }

           //player1y = p1y;

            invalidate();
            break;
        }

        }
        return true;


    }

это находится в моем классе поверхности. Как я могу изменить метод ввода или полностью избавиться от него и изменить его для достижения моей цели? Также извините за мои переменные. Eclipse часто падает на меня, и сенсорная панель моего ноутбука, как правило, двигает мой курсор, поэтому более короткие переменные показались жизнеспособными. p1y - это осязание. и player1y и player2y - это позиции y весла player1 и player2.

1 Ответ

2 голосов
/ 13 апреля 2011

MotionEvent может содержать несколько указателей.Используйте getPointerCount(), чтобы увидеть, сколько указателей касается экрана в текущем событии.Существуют альтернативные версии getX и getY, которые принимают индекс от 0- getPointerCount() - 1.

. В более сложном приложении вы хотите отслеживать пальцы по идентификатору указателя, но для чего-то такого простого, гдевы используете точку обрезки на экране, вы можете сделать что-то вроде этого в вашем ACTION_MOVE случае:

int pointerCount = ev.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
    float x = ev.getX(i);
    float y = ev.getY(i);

    if (x < 300) {
        player1y = y;
    } else if (x > 300) {
        player2y = y;
    }
}

Этот пост из блога разработчиков Android может помочь, если вам нужна дополнительная информация: http://android -developers.blogspot.com / 2010/06 / верстка чувственные из-multitouch.html

...