2014-02-20 6 views
1

В настоящее время я делаю игру libGDX для Android-устройств. Я хочу иметь метод, который вызывает функцию при вызове touchDown, но не при нажатии кнопки. Это связано с тем, что я устанавливаю цель для башни, и она не должна вращаться при нажатии кнопки.Игра LibGDX: проверьте, не нажата ли кнопка, когда touchDown называется

код у меня есть на данный момент

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED 
      && state != STATE.EXITMENU && !slowButton.isOver() 
      && !pauseButton.isPressed()) 
     turret.setTargetAngle(screenX, screenY); 
    return true; 
} 

Это отменяет функцию в классе InputProcessor мой класс реализует.

Этот код работает:

@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED 
      && state != STATE.EXITMENU && !slowButton.isPressed() 
      && !pauseButton.isPressed()) 
     turret.setTargetAngle(screenX, screenY); 
    return true; 
} 

Тот факт, что touchDragged работает, но приземление не указывает на то, что кнопка не получает помечено как «не нажата» до окончания первой инстанции.

Я также попытался использовать Button.isOver() вместо Button.isPressed(), но это все еще не работает должным образом.

У кого-нибудь есть советы?

ответ

2

Вы можете использовать метод hit(x, y, touchable) на кнопке. Он находит самого глубокого актера в предоставленных координатах. Вы должны вызвать его со сцены, и если он вернет pauseButton, то нажата кнопка pauseButton. Если он возвращает то, что не является slowButton, или null, то оно не было нажато. Дополнительная информация о обнаружении попадания on the Libgdx wiki.

Так что вы могли бы сделать что-то вроде этого:

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    if (state != STATE.GAMEOVERLOST && state != STATE.PAUSED 
      && state != STATE.EXITMENU && !slowButton.isOver() 
      && !stage.hit(screenX, screenY, true).equals(pauseButton)) 
     turret.setTargetAngle(screenX, screenY); 
    return true; 
} 

Однако, вы, возможно, придется преобразовать координаты экрана к стадии координат, в зависимости от координат настройки системы.

+0

Я только что проверил, что stage.hit (screenX, screenY, true) == null, который работал, потому что кнопки были единственными действующими лицами на сцене. Спасибо, что указал мне в правильном направлении! – Highfield

Смежные вопросы