Android перерисовывает холст с 30fps - PullRequest
2 голосов
/ 16 марта 2011

Я сейчас пытаюсь реализовать простой прыгающий шар (в 2d) на моем устройстве Android (физика основана на вращении устройства и нескольких шарах, поступающих в более позднюю точку).

Я создал CustomDrawViewкласс, расширяющий View с помощью функции onDraw, которая рисует круг в центре экрана.Математика, чтобы заставить его двигаться правильно, бесполезна, так как мой вопрос, где я должен вызвать invalidate в CustomDrawView.

  • Должен ли я создать новый поток для обработки этого времени?как в Thread.sleep(1000/30); view.invalidate (для 30 кадров в секунду)
  • Должен ли я заставить его работать в том же потоке на основе какого-то другого метода?

Конечно же, батарея является важным фактором, какой методлучше всего для экономии батареи?

1 Ответ

2 голосов
/ 16 марта 2011

Из того, что я видел в представлениях Android, они не самые лучшие, если вы планируете делать что-либо с частотой кадров, это очень важно. Они очень быстро набирают обороты, и используемый конвейер передачи сообщений рисует их - часто самая медленная вещь, которую ваша программа будет делать в этом кадре. Я бы просто переместил рендеринг сейчас в OpenGL. Используя SurfaceView, вы все равно можете получить настройку очень быстро (хорошо, SurfaceView тоже не очень хорош, но намного лучше, чем все виды).

Если бы я использовал представления, я бы использовал ваш первый метод и настроил поток синхронизации, использовал его как стандартный цикл игры, который выполняет обновление, затем запускает отрисовку, а затем ожидает, чтобы обеспечить полную 1/30 числа секунда прошла и зацикливается.

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