Android绘制大量位图时的性能如何?

9
我正在编写一个Android游戏,似乎在绘制画布方面存在性能问题。我的游戏有多个关卡,每个关卡都有不同数量的对象。
奇怪的是,在一个包含45张图片的关卡中,游戏运行得非常流畅(几乎60帧/秒)。然而,在另一个包含81张图片的关卡中,游戏几乎无法运行(只有11帧/秒);基本上是无法玩的。这对于除我之外的任何人来说都很奇怪吗?
我使用的所有图像都是.png格式的,前述关卡之间唯一的区别就是图片数量。
这是怎么回事?画布是否无法在每个游戏循环中绘制这么多图片?你们会如何建议我改善这个性能问题?
提前感谢。
3个回答

3

对我来说也很奇怪。我也在开发一个游戏,有很多关卡,可以轻松地在屏幕上有100个游戏对象,但我没有遇到类似的问题。

如果使用得当,drawbitmap应该非常快;它仅仅是一个复制命令。我甚至不会原生地绘制圆形;我有预先渲染的圆形位图。

然而,在Android中位图的性能非常敏感,取决于你如何处理它。创建位图可能非常昂贵,因为Android默认情况下会自动缩放png,这需要CPU密集型的计算。所有这些东西都需要在渲染循环之外恰好执行一次。

我怀疑你在找错了地方。如果你以相同的方式创建和使用相同类型的图像,则将屏幕图像数量增加一倍不应导致性能下降超过4倍。最多只能是线性的(2倍)。

我的第一个猜想是,你的大部分CPU时间都用于碰撞检测。与绘制位图不同,这通常随着相互作用对象的数量平方增长,因为每个对象都必须针对每个其他对象进行碰撞测试。你将游戏对象数量加倍,但性能降至四分之一,即按对象数量的平方。如果是这种情况,不要绝望;有一些方法可以进行碰撞检测,而不会随着对象数量的增加而呈平方增长。

同时,我建议进行基本测试。如果您实际上不绘制一半的对象会发生什么?游戏运行速度更快吗?如果没有,那就与绘图无关。


1

我认为这个讲座会对你有所帮助。跳到第45分钟,那里有一个比较Canvas方法和OpenGl方法的图表。我认为这就是答案。


0

我遇到了一个类似的性能问题 - 即,第一级运行得很好,而第二级则不行。

结果发现并不是渲染出了问题(至少不是特别明显的问题),而是与关卡逻辑有关的其他问题导致了瓶颈。

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

方法分析显示了 CPU 花费时间的位置和帧率故障的原因。(顺便说一句,第二级的渲染成本也更高,但不是瓶颈)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接