11

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

GLSurfaceView使用and时我真的不知道该怎么做Renderer。据我了解,我不能再像使用常规表面那样按需绘制手工制作的 gameThread 了Canvas,因为现在有一个渲染线程将调用Renderer.onDrawFrame()(在我传递给GLSurfaceView)。

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

4

1 回答 1

5

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

这里有一个关于 Android 和 OpenGL 的很棒的教程:

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

于 2012-02-14T21:01:00.080 回答