较快的Android设备上的FPS较慢

时间:2015-02-21 18:56:34

标签: android opengl-es surfaceview frame-rate

我使用SurfaceView来完成我几乎已经完成的2D Android游戏。它基于JBox2D。它完全在三星Galaxy S2上运行,它的FPS是60.它在HTC Explorer上运行也很流畅,它的FPS大约是54.我认为如果我的游戏在这些相对较旧的设备上运行良好,它会更好地工作较新的。但是我错了!我昨天看到我在Galaxy Note 4上的游戏的FPS值在22到45之间变化,具体取决于游戏对象的数量。

在Google和StackOverflow调查此问题之后,我推断出像Galaxy Note 4这样具有更高分辨率(1440 x 2560)的新设备无法处理大型图像,而小型设备可以处理自己的小图像(Galaxy s2:480 x 800,HTC Explorer:320 x 480)。是的,新设备肯定比旧设备更快,但我认为他们对新设备的巨大分辨率是SurfaceView缓慢的原因。当然,这在SurfaceView条件下有效。如果我在游戏中使用OpenGL,对于具有高分辨率的新设备来说不会有问题。

我的位图专为800 x 1280设备而设计。根据不同的设备分辨率,我的游戏使用createScaledBitmap在每个级别的开头加载图像时重新缩放图像。

我无法将我的游戏从SurfaceView转换为OpenGL平台,因为我的游戏即将完成,而且我对OpenGL知之甚少。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

我相信您已正确识别问题:较新的设备具有像您一样在27"显示器(2560x1440),因为制造商正在追逐屏幕分辨率,就像它们使用相机百万像素一样。结果是渲染全屏需要更长时间,尤其是当您在软件中执行此操作时。更快的CPU和增加的总线带宽可以提供帮助,但全屏软件渲染存在问题。

Android的解决方案是让Surface更小,让硬件在扫描时进行扩展。这比放大每个单独项目更容易(也更有效)。您可以使用SurfaceHolder#setFixedSize()方法执行此操作。例如,对于2560x1440显示器,您可以将“Surface”大小设置为1280x720,并仅渲染四分之一像素。显示器执行像素倍增(使用双线性滤波)。

您可以找到blog post here,并且可以在Grafika"硬件缩放器训练器"活动(youtube demo video)。

各种示例使用GLES - 这也可以从填充的像素更少中获益 - 但也适用于Canvas渲染。