Правильная обработка сенсорного ввода на Android в игре

1

Я действительно хорошо знаком с обработкой сенсорных событий в Android. Тем не менее, я все еще закодировал все. Я имею в виду много сравнения, например if (e.getX()<0.1*v.getX), как для игровых объектов, так и для hud.

Теперь я на самом деле ищут правильные обработки сенсорных событий. Я также попытался сохранить значения x и y onTouch, однако это тоже запутывает, особенно когда мне также нужно проверить ACTION_DOWN или ACTION_MOVE и т.д.

так кто-нибудь знает лучшую архитектуру или что-то в этом роде?

  • 0
    Не совсем уверен, что вы спрашиваете. Вы имеете в виду, что не хотите тестировать экранные координаты в коде для игровых объектов или HUD?
  • 0
    Я не хочу справляться со всем в моем классе View. Я не знаю, следует ли мне хранить несколько переменных xy или полный объект touchEvent. Или я должен передать это на что-то, например, объекты или какой-то класс TouchHandler? Я ищу общий и лучший полезный способ обработки ввода, также для HUD.
Теги:
architecture
input

1 ответ

2
Лучший ответ

У вашей игры, вероятно, есть основной цикл в другом потоке, так как в Android вы должны оставаться вне потока событий. Если это так, я бы создал отдельный класс InputBuffer для приема и хранения входящих событий касания. Когда я это сделал, InputBuffer был OnTouchListener для SurfaceView.

Когда есть входящее событие, InputBuffer просто копирует его и возвращает. Это предотвращает поток событий и помогает предотвратить ANR.

Затем в основном цикле игровые объекты, которые должны знать о пользовательском вводе, имеют доступ к InputBuffer чтобы они могли получить информацию о сохраненном событии. Это перемещает ваш код обработки ввода из представления и в игровые объекты, где это имеет больше смысла.

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

  • 0
    Вместо того, чтобы создавать класс InputBuffer, не будет ли так просто сделать геттеры и сеттеры в классе представления?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню