Лучший способ сделать игровой цикл для Android с использованием OpengGLSurface - PullRequest
11 голосов
/ 14 февраля 2012

Из того, что я видел, если я хочу сделать игровой цикл NON-OpenGL, я могу создать игровой поток, который во время цикла будет обновлять состояние игры (или физику игры), а также обновлять графику, блокируяCanvas из (обычного) SurfaceView, делая рисование с помощью методов Canvas.drawXXX (...) и затем разблокируя его, после чего графика обновляется для цикла.

Я недействительно понять, как это сделать при использовании GLSurfaceView и Renderer.Из того, что я понимаю, я больше не могу рисовать мой ручной gameThread по требованию, как у меня с обычной поверхностью, и это Canvas, потому что теперь есть поток рендеринга, который будет вызывать Renderer.onDrawFrame() (в моей реализации рендереракласс, который я передаю в GLSurfaceView).

Тогда мой вопрос, каков хороший способ сделать игровой цикл с GLSurfaceView и Renderer?Должен ли я по-прежнему создавать свой отдельный игровой поток, но обрабатывать в нем только обновления состояния игры (физики), а затем использовать это игровое состояние в моей реализации Renderer.onDrawFrame () для фактического рисования графики на основе текущего состояния?Должен ли я использовать поток Rendere только для обновления состояния?

1 Ответ

5 голосов
/ 15 февраля 2012

Ну, как выясняется, лучший способ - использовать поток, предоставленный GLSurface.Привязка к нему происходит через реализацию интерфейса Renderer.По сути, метод RenDerrer onDrawFrame () можно считать аналогичным методу run () обычного потока.Этот вид выбрасывает из окна концепцию фиксированных обновлений в секунду (не совсем, но это слишком сложно для этого контекста), но с другой стороны, вы получаете оптимальные обновления графики.

Есть отличнаяучебник по Android и OpenGL здесь:

http://insanitydesign.com/wp/projects/nehe-android-ports/

...