Android холст onDraw время

  1. Я делаю игру для Android, в которой некоторые графические элементы двигаются быстро. Я собираюсь использовать Canvas, но опасаюсь, что метод onDraw будет вызываться с нерегулярными интервалами, из-за чего быстрые элементы будут двигаться с неравномерной скоростью. Есть ли способ убедиться, что метод onDraw вызывается через равные промежутки времени.

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

Пожалуйста, помогите,

Самир


person user1990654    schedule 18.01.2013    source источник


Ответы (1)


Я собираюсь использовать Canvas, но опасаюсь, что метод onDraw будет вызываться с нерегулярными интервалами, из-за чего быстрые элементы будут двигаться с неравномерной скоростью.

Вы не должны не обновлять положение объектов в onDraw(), потому что:

  • Действительно, метод может не вызываться через заданные промежутки времени.
  • Он предназначен для рисования объектов, а не для обновления объектов.

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

После обновления мира вызовите invalidate() на своем View, чтобы активировать метод onDraw(). Если у вашего приложения есть свободное время, оно будет вызвано. Если нет, то нет проблем, так как world update method будет продолжать работать и, таким образом, обновлять ваш мир.

(Конечно, если ваше приложение слишком занято, представление никогда не обновляется, и вам нужно решить проблемы!)

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

Это путь к «методу обновления мира»! Это исправит нерегулярные интервалы таймера.

person Veger    schedule 18.01.2013