从我所见过的,如果我想制作一个非opengl游戏循环,我能做的就是有一个游戏线程,在循环中会更新游戏状态(或游戏物理)并更新图形通过从(普通)Canvas
锁定SurfaceView
,通过Canvas.drawXXX(...)方法进行绘图,然后解锁它,此时图形将更新为循环。
使用GLSurfaceView
和Renderer
时,我真的无法做到这一点。根据我的理解,我不能再像我在常规表面和Canvas
那样按照手工制作的游戏线程画,因为现在有一个渲染线程会调用{ {1}}(关于我传递给GLSurfaceView的渲染器类的实现)。
那么我的问题是,用GLSurfaceView和Renderer制作游戏循环的好方法是什么?我是否仍然应该制作单独的游戏线程,但只处理其中的游戏状态(物理)更新,然后在我的Renderer.onDrawFrame()实现中使用该游戏状态来实际绘制基于当前状态的图形?我应该只使用Rendere的线程来进行状态更新吗?
答案 0 :(得分:5)
嗯,事实证明,最好的方法是使用GLSurface提供的线程。它的钩子来自Renderer接口的实现。实际上,Renderer的onDrawFrame()方法可以被认为类似于常规Thread的run()方法。这种抛出窗口的每秒固定更新范式的概念(不是真的,但在这种情况下它太复杂了)但另一方面你获得了最佳的图形更新。
这里有关于Android和OpenGL的精彩教程: