Java Android 游戏 GLES 2.0 GLSurfaceView 生涩

Java Android Game GLES 2.0 GLSurfaceView jerky

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

有人也有这个问题吗? 有没有比 GLSurfaceView 更好的方法,它针对游戏目的进行了优化? 如果没有解决方案,是否有一个框架、库或游戏引擎可以为我接管底层的东西,例如游戏循环创建部分,这样我就不必再担心了? 就像在 XNA 中的游戏 class 例外,我想用普通的 opengl 渲染游戏,而不是像 SpriteBatch class 这样的抽象.

有图形引擎(抽象出 GLES 的东西)和游戏引擎(抽象出几乎所有东西)。如果您愿意并且实际上坚持使用纯 OpenGL ES,那么就没有理由使用它们——您已经在执行 "low level stuff".

this appendix to the graphics architecture doc. In short, forget about GLSurfaceView, use Choreographer, and be prepared to skip frames. A simple example implementation can be found in Grafika's "record GL app" 或 "hardware scaler exerciser" 活动中详细描述了构建游戏循环的正确方法。

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