我使用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
类这样的抽象。
答案 0 :(得分:1)
有图形引擎(它抽象出GLES的东西)和游戏引擎(几乎所有东西都抽象出来)。如果您愿意并且实际上坚持使用普通的OpenGL ES,那么就没有理由使用它们 - 您已经在使用"低级别的东西"
在this appendix到图形架构doc中详细描述了构建游戏循环的正确方法。简而言之,忘记GLSurfaceView,使用Choreographer,并准备跳过帧。可以在Grafika's"记录GL应用程序"中找到一个简单的示例实现。或者"硬件缩放器训练器"活动。
忽略FPS,每帧观看毫秒数。如果您看到大停顿,您需要弄清楚导致它们的原因。 Android上的基本工具是systrace。