为什么SurfaceView的游戏循环无法运行体面的FPS?

时间:2011-08-06 13:14:17

标签: android surfaceview frame-rate game-loop

我拼凑了一个简单的游戏循环,主要是使用看起来很普遍的技术,特别是在Java的Killer游戏编程书中,在本教程中我刚刚发现:Here 只是一个带有后台缓冲区的简单定时游戏循环。

问题在于它不会以良好的FPS重绘屏幕。我能从摩托罗拉Xoom中获得的最好成绩是15FPS,目标是24。

如果我的后置缓冲区大小只有一半,那么速度会大大提高,所以我猜这个问题可能与利用Xoom上的屏幕有关(我的SurfaceView的大小是1280x727)......其他游戏在相同规模下运行良好。

我没有任何其他设备可供测试,因此我现在有点担心该怎么做。

我做错了什么/失踪/无知?

2 个答案:

答案 0 :(得分:10)

也许你的位图和表面的像素格式不同,每当你绘制位图时都会导致转换?这肯定会导致开销。尝试使用SurfaceHolder.setFormat()进行试验,看看是否有帮助。

由于您的位图使用Bitmap.Config.ARGB_8888,您可以尝试将表面支架格式设置为PixelFormat.RGBA_8888。或者,如果可以,请尝试使用Bitmap.Config.RGB_565PixelFormat.RGB_565

答案 1 :(得分:0)

需要一些代码,但我怀疑你没有使用任何线程?如果你没有使用Threads,那么你的程序将不稳定并且经常崩溃,因为你所有的处理都在同一个线程上

简而言之,请确保您已经创建了一个新线程,我使用OpenGL,无论如何都需要一个线程,因此这可能是您走下去的最佳途径