【发布时间】:2012-01-03 03:44:13
【问题描述】:
我一直在为 Android 开发一款游戏基础纸牌游戏。目前我的目标是 Android 3.0 并在华硕 Transformer 平板电脑上进行测试。我正在使用具有简单画布操作的 SurfaceView 对象,类似于 SDK 中的 Lunar Lander 示例。我在 AndroidManifest.xml 中启用了硬件加速。
我几乎完成了游戏的编码。但是,我遇到了一些帧速率问题。在基本游戏过程中,我的帧速率为 21-22 fps。但是,我预计会为简单的视觉效果添加一些粒子效果,这肯定会给我带来不可接受的帧速率。为了帮助隔离问题,我注释掉了所有文本和卡片以及所有动画的绘图。这将我的帧速率提高到 31 fps。这给我留下了一个简单的游戏循环,它锁定画布,将画布填充为黑色,绘制 1280x800 背景位图,然后解锁并发布画布。移除背景绘图会将帧速率提高到大约 62 fps,由于 lockCanvas 节流,这应该在设备最大值附近。绘制一个简单的位图应该是一项昂贵的操作吗?我知道这是一个大纹理,但我见过很多游戏成功地使用了大背景纹理,但效果不大。如果没有 OpenGL,我可以达到不错的帧速率吗?我看了日志,确认不是GC问题。
到目前为止,我唯一尝试过的就是确保位图没有主动重新缩放。我将背景 png 修改为 1280x696,这是为操作栏和主蜂窝底栏调整的确切尺寸。我将修改后的文件放在 drawable-nodpi 文件夹中,所以我相信我的图像不应该缩放。但是,这对帧速率没有影响;帧速率降至 31 fps,仅绘制背景。
有人对我可以做些什么来提高帧速率有任何想法吗?我猜我的问题一定来自绘制位图,因为我基本上已经消除了其他所有内容。
【问题讨论】:
-
我进行了更多测试,发现了一些非常奇怪的行为。我创建了几种不同尺寸的图像。对于 1200x600 图像,我没有看到帧率下降 (61 fps)。对于 1260x650 图像,帧速率降至 31 fps。唯一改变的变量是图像大小。有什么想法吗?
标签: android background bitmap scaling frame-rate