我正在将一款2D动作游戏(在XNA 4.0中开发)从Windows Phone 7移植到Android。我正在使用大量的Canvas.drawBitmap()调用,每个帧更新大约有200-300次,每次调用都会使用不同的Paint处理绘制时的透明度和着色。这用于管理粒子系统和各种叠加层以及游戏内效果,包括平铺背景和游戏内精灵。我不进行任何按需调整大小或旋转操作,只是简单的src->dest大小相同的矩形。
在WP7上,这可以运行30+fps,但我在我的测试设备(三星Galaxy S)上只能达到12fps。这导致游戏无法玩耍。通过对代码进行分析,我确认所有的时间都浪费在了Canvas.drawBitmap()上。
我似乎遵循了所有通常的性能建议 - 使用SurfaceView,注意GC,因此不会创建大量的可抛弃对象,并避免使用Drawables。
我是否正确地理解了Canvas.drawBitmap()是CPU绑定的,如果我想提高性能,我必须切换到使用GPU的OpenGL?我找不到任何官方说明,但根据一些评论的含义,我认为那可能是下一步...