Java Android游戏GLES 2.0 GLSurfaceView jerky

时间:2015-10-12 16:26:24

标签: java android opengl-es glsurfaceview

我使用GLSurfaceView上的GLES 2.0在Java中制作了一个小型2D游戏。 但是我的表现存在一些问题。 我在OnDrawFrame函数中以连续模式运行的游戏状态的所有渲染和更新。 在编写应用程序时,即使使用固定或可变时间步长技术,我也注意到一些滞后所有2秒。 我可以通过平均增量时间来弥补这一点,但有时我仍然可以看到出现了问题。 首先,我认为我编写了错误的代码(太多使用GC或多边形......)但是,在创建一个只记录FPS的空应用程序后,我可以看到同样的问题。 所有2秒FPS从50-60 FPS下降到15-30 FPS一小段时间。 即使在不同的设备上(Nexus 7 2013,HTC Desire 500)。

也有人这个问题吗? 有没有比GLSurfaceView更好的方法,这是为游戏目的而优化的? 如果没有解决方案,是否有框架,库或游戏引擎为我接管低级别的东西,例如游戏循环创建部分,所以我不再需要担心它? 就像在XNA游戏类中一样,除了我想用普通的opengl渲染游戏而不是像SpriteBatch类这样的抽象。

1 个答案:

答案 0 :(得分:1)

有图形引擎(它抽象出GLES的东西)和游戏引擎(几乎所有东西都抽象出来)。如果您愿意并且实际上坚持使用普通的OpenGL ES,那么就没有理由使用它们 - 您已经在使用"低级别的东西"

this appendix到图形架构doc中详细描述了构建游戏循环的正确方法。简而言之,忘记GLSurfaceView,使用Choreographer,并准备跳过帧。可以在Grafika's"记录GL应用程序"中找到一个简单的示例实现。或者"硬件缩放器训练器"活动。

忽略FPS,每帧观看毫秒数。如果您看到大停顿,您需要弄清楚导致它们的原因。 Android上的基本工具是systrace