Правильная обработка сенсорного ввода на Android в игре - PullRequest
1 голос
/ 12 декабря 2011

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

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

, чтобы кто-нибудь знал лучшую 'архитектуру иличто-то для этого?

1 Ответ

2 голосов
/ 13 декабря 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...