2013-09-07 4 views
0

Я закончил мою версию pc и тестировал свою игру libgdx, а на ПК это выглядело прекрасно, но когда я запустил ее на двух телефонах с Android (Samsung Galaxy S3 mini и Samsung Galaxy S2), я столкнулся с некоторые проблемы, которых я не ожидал. В основном, на моей версии 1v1-плеер каждый игрок имеет свои сенсорные элементы управления влево и вправо. Игрок имеет постоянную скорость (длина вектора скорости постоянна), но всякий раз, когда игрок прикасается к любому из элементов управления, изменяется направление вектора скорости. Мой код выглядит следующим образом:libgdx multitouch issue

private void handleInput(float delta) { 
    if (Gdx.input.isTouched()) { 
     for (int i = 0; i < 20; i++) { 

      if (Gdx.input.isTouched(i)) { 

       touchedX = Gdx.input.getX(i); 
       touchedY = Gdx.input.getY(i); 
       // PLAYER 1 
       if (touchedX <= dB) { 
        // RED RIGHT 
        if (touchedY <= h/2 + h/playerSpacing + dB 
          && touchedY >= h/2 + h/playerSpacing) { 
         turnLeft(players[0], delta); 
        } 
        // RED LEFT 
        else if (touchedY <= h/2 - h/playerSpacing 
          && touchedY >= h/2 - h/playerSpacing - dB) { 
         turnRight(players[0], delta); 
        } 

       } 
       //PLAYER 2 
       else if (touchedX >= w - dB) { 
        // BLUE RIGHT 
        if (touchedY <= h/2 + h/playerSpacing + dB 
          && touchedY >= h/2 + h/playerSpacing) { 
         turnRight(players[1], delta); 
        } 
        // BLUE LEFT 
        else if (touchedY <= h/2 - h/playerSpacing 
          && touchedY >= h/2 - h/playerSpacing - dB) { 
         turnLeft(players[1], delta); 
        } 
       } 

      } 
     } 
    } 

Он просто не работает хорошо на реальном андроид устройстве, прикасается не свободно признается и полный контроль над игроками скомпрометирован. Любые идеи, почему это происходит? У LibGdx есть плохая поддержка мультитач или я сделал что-то не так?

ответ

1

Проблема в том, что вы не пропустили точки касания.

вы должны unproject сенсорных точек, как

touchpoint = new Vector3(); 

camera.unproject(touchpoint.set(Gdx.input.getX(i),Gdx.input.getY(i),0); 
touchedX = touchpoint.x; 
touchedY = touchpoint.y; 

также я бы рекомендовал вам использовать inputprocessor вместо того, чтобы X & значения Y из функций Gdx.input.getX (я), Gdx.input.getY (i), поскольку Inputprocesor дает вам гораздо больше контроля над событиями мультитач, и вам не нужно писать цикл для получения точек касания, он также дает вам указатель касания, а также его функцию.

+0

Спасибо за ответ, но проблема по-прежнему сохраняется, поскольку для моего В игре я не использовал проекционные матрицы. – user2685747

+0

Лучшее описание проблемы. Если я нажму кнопку влево, а затем удерживая ее, нажмите правую кнопку, а затем кнопку повторного просмотра влево, это не сработает. Это моя ошибка? – user2685747

+0

попробуйте удалить первую строку функции (если (Gdx.input.isTouched())), так как по умолчанию эта строка означает Gdx.input.isTouched (0) ... просто запустите цикл и проверьте isTouched для всех индексов –