Я действительно хорошо знаком с обработкой сенсорных событий в Android. Тем не менее, я все еще закодировал все. Я имею в виду много сравнения, например if (e.getX()<0.1*v.getX)
, как для игровых объектов, так и для hud.
Теперь я на самом деле ищут правильные обработки сенсорных событий. Я также попытался сохранить значения x и y onTouch, однако это тоже запутывает, особенно когда мне также нужно проверить ACTION_DOWN или ACTION_MOVE и т.д.
так кто-нибудь знает лучшую архитектуру или что-то в этом роде?
У вашей игры, вероятно, есть основной цикл в другом потоке, так как в Android вы должны оставаться вне потока событий. Если это так, я бы создал отдельный класс InputBuffer
для приема и хранения входящих событий касания. Когда я это сделал, InputBuffer
был OnTouchListener
для SurfaceView
.
Когда есть входящее событие, InputBuffer
просто копирует его и возвращает. Это предотвращает поток событий и помогает предотвратить ANR.
Затем в основном цикле игровые объекты, которые должны знать о пользовательском вводе, имеют доступ к InputBuffer
чтобы они могли получить информацию о сохраненном событии. Это перемещает ваш код обработки ввода из представления и в игровые объекты, где это имеет больше смысла.
В зависимости от скорости вашей игры вы также можете добавить блок, чтобы входящие события не обновляли сохраненную копию при обновлении игровых объектов. Вместо этого сохраненная копия обновляется после обновления основного цикла, и таким образом все игровые объекты работают с одним и тем же событием.