2013-06-01 5 views
7

Я делаю гоночную игру с помощью Libgdx. Я хочу коснуться половины правой стороны экрана, чтобы ускорить, в то же время, не удаляя предыдущую сенсорную точку, коснитесь еще раз в левой части экрана, чтобы выстрелить. Я не могу обнаружить более поздние сенсорные точки.Как отслеживать несколько событий касания в Libgdx?

Я искал и получал Gdx.input.isTouched(int index) метод, но не могу определить, как его использовать. Мой сенсорный экран код:

if(Gdx.input.isTouched(0) && world.heroCar.state != HeroCar.HERO_STATE_HIT){ 
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    if (OverlapTester.pointInRectangle(rightScreenBounds, touchPoint.x, touchPoint.y)) { 
     world.heroCar.state = HeroCar.HERO_STATE_FASTRUN; 
     world.heroCar.velocity.y = HeroCar.HERO_STATE_FASTRUN_VELOCITY; 
    } 
} else { 
    world.heroCar.velocity.y = HeroCar.HERO_RUN_VELOCITY; 
} 

if (Gdx.input.isTouched(1)) { 
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    if (OverlapTester.pointInRectangle(leftScreenBounds, touchPoint.x, touchPoint.y)) { 
     world.shot(); 
    } 
} 

ответ

12

Вы хотите использовать метод Gdx.input.getX(int index). Параметр integer index представляет идентификатор активного указателя. Чтобы правильно использовать это, вы захотите повторить все возможные указатели (в случае, если два человека имеют 20 пальцев на планшете?).

Что-то вроде этого:

boolean fire = false; 
boolean fast = false; 
final int fireAreaMax = 120; // This should be scaled to the size of the screen? 
final int fastAreaMin = Gdx.graphics.getWidth() - 120; 
for (int i = 0; i < 20; i++) { // 20 is max number of touch points 
    if (Gdx.input.isTouched(i)) { 
     final int iX = Gdx.input.getX(i); 
     fire = fire || (iX < fireAreaMax); // Touch coordinates are in screen space 
     fast = fast || (iX > fastAreaMin); 
    } 
} 

if (fast) { 
    // speed things up 
} else { 
    // slow things down 
} 

if (fire) { 
    // Fire! 
} 

Альтернативный подход заключается в установке InputProcessor, чтобы получить входные события (вместо «опроса», вход в приведенном выше примере). И когда указатель входит в одну из областей, вам нужно будет отслеживать состояние этого указателя (чтобы вы могли его очистить, если он ушел).

+0

Привет, спасибо за ваш ответ. Когда я использовал свой код, его огонь выстрелил либо я касаюсь экрана, либо нет, но я хочу выстрелить только при касании экрана. –

+4

А, может быть, код должен проверять 'Gdx.input.isTouched (i)' перед вызовом 'getX (i)'? (Вероятно, неиспользуемые точки касания имеют X нуля ...). Я обновлю код. –

+1

Эй, его работа, спасибо. –