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