Как правильнее реализовать игровой цикл в игре под Android? Timer vs Handler?

Здравствуй, уважаемое Хабрасообщество! Эта тема уже поднималась на Хабре, но я не смог найти именно то, что я хочу узнать.

Я в программировании под Android пока новичок и для тренировки и развития решил написать простенькую игру типа «змейка». Соответственно, возник вопрос: как реализовать игровой цикл. Я погуглил и нашел два приемлимых (для новичка) варианта. Первый через Timer + TimerTask, второй — через Handler + Runnable.

В связи с этим у меня возникают некторые сомнения:

1. Таймер. Что будет если кадр не успеет отрисоваться за выделенный ему промежуток времени? То есть случиться следующий tick таймера до того как успеет закончиться предыдущий. А ведь рисование в моем случае блокирует canvas через synchronized, то есть методы перерисовки экрана как бы «выстроятся в очередь» на блокировке. Что будет в этом случае, если остановить таймер?

2. Handler. Насколько я понял, следующее событие планируется через postDelayed. Но ведь отрисовка кадра тоже занимает некоторое время. Таким образом получается, что в секунду будет отрисовано меньше кадров, чем было задумано. То есть надо как-то вычислять время для планирования следующего события, а не использовать константу 1000/FPS.


Я понимаю, что я задал слишком много вопросов, поэтому я буду рад получить хотя бы часть ответов. Заранее спасибо!
  • Вопрос задан
  • 3260 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Fushigi
Делайте так, чтобы не тормозило :) В дебри лезете ради простенькой «змейки»
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы