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。
我在 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。