使用OpengL Surface为Android制作游戏循环的最佳方式

时间:2012-02-14 10:03:20

标签: android opengl-es game-loop

从我所见过的,如果我想制作一个非opengl游戏循环,我能做的就是有一个游戏线程,在循环中会更新游戏状态(或游戏物理)并更新图形通过从(普通)Canvas锁定SurfaceView,通过Canvas.drawXXX(...)方法进行绘图,然后解锁它,此时图形将更新为循环。

使用GLSurfaceViewRenderer时,我真的无法做到这一点。根据我的理解,我不能再像我在常规表面和Canvas那样按照手工制作的游戏线程画,因为现在有一个渲染线程会调用{ {1}}(关于我传递给GLSurfaceView的渲染器类的实现)。

那么我的问题是,用GLSurfaceView和Renderer制作游戏循环的好方法是什么?我是否仍然应该制作单独的游戏线程,但只处理其中的游戏状态(物理)更新,然后在我的Renderer.onDrawFrame()实现中使用该游戏状态来实际绘制基于当前状态的图形?我应该只使用Rendere的线程来进行状态更新吗?

1 个答案:

答案 0 :(得分:5)

嗯,事实证明,最好的方法是使用GLSurface提供的线程。它的钩子来自Renderer接口的实现。实际上,Renderer的onDrawFrame()方法可以被认为类似于常规Thread的run()方法。这种抛出窗口的每秒固定更新范式的概念(不是真的,但在这种情况下它太复杂了)但另一方面你获得了最佳的图形更新。

这里有关于Android和OpenGL的精彩教程:

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