2011-02-13 29 views
9

我正在编写Android游戏,我似乎在绘制画布时遇到了性能问题。我的游戏有多个层次,每个层次都有(显然)不同数量的对象。Android drawBitmap对于很多位图性能?

奇怪的是,在一个包含45个图像的级别,运行完美(几乎60帧/秒)。然而,另一层包含81幅图像,几乎没有运行(11帧/秒);这几乎是无法玩的。除了我之外,任何人都觉得这很奇怪吗?

我使用的所有图像都是.png,上述级别之间的唯一区别就是图像的数量。

这是怎么回事? Canvas可以在每个游戏循环中画出这么多的图像吗?你们如何推荐我改善这种表现?

在此先感谢。

回答

1

我认为this lecture会帮助你。转到45分钟。有一张图比较了Canvas方法和OpenGl方法。我认为这是答案。

3

对我来说似乎也很陌生。我也在开发一款游戏,很多关卡,我可以在屏幕上轻松拥有100个游戏对象,还没有看到类似的问题。

正确使用,drawbitmap应该非常快;它不过是一个复制命令而已。我甚至不会原生画圈子;我有预渲染的圆圈的位图。

但是,Android中Bitmaps的性能对您的操作非常敏感。创建位图可能非常昂贵,因为Android可以默认自动缩放CPU密集型的png。所有这些东西都需要在渲染循环之外完成一次。

我怀疑你是找错了地方。如果以同样的方式创建和使用相同类型的图像,那么屏幕图像数量翻倍不应使性能下降超过4倍。最多它应该是线性的(因子2)。

我的第一个怀疑是你的大部分CPU时间都花在了碰撞检测上。与绘制位图不同,这通常会以交互对象的数量的平方上升,因为每个对象都必须经过测试以与其他对象发生碰撞。游戏对象的数量增加了一倍,但是性能却下降到了四分之一,即根据对象数量的平方。如果是这样,不要绝望;有做碰撞检测的方法不会像对象数量的平方那样增长。

与此同时,我会做基本的测试。如果你没有真正画出一半的物体会发生什么?游戏运行得更快吗?如果不是,它与绘图无关。

0

我遇到了性能类似的问题 - 即1级跑伟大和2级没有

原来它不是,这是一个错误(至少没有明确)的渲染。这是造成瓶颈的关卡逻辑的其他特定情况。

点是... Traceview是你最好的朋友。

该方法分析显示CPU在哪里花费时间以及为什么帧速率发生故障。(顺便说一下,二级的渲染成本也较高,但不是瓶颈)