【问题标题】:Android drawBitmap Performance For Lots of Bitmaps?大量位图的 Android drawBitmap 性能?
【发布时间】:2011-02-13 00:51:59
【问题描述】:

我正在编写一个 Android 游戏,但在画布上绘图时似乎遇到了性能问题。我的游戏有多个关卡,每个关卡(显然)都有不同数量的对象。

奇怪的是,在一个包含 45 张图像的关卡中,运行完美无缺(几乎 60 fps)。然而,另一个包含 81 张图像的关卡几乎没有运行(11 fps);它几乎无法播放。除了我以外的任何人都觉得这很奇怪吗?

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

这里发生了什么? Canvas 不能在每个游戏循环中绘制这么多图像吗?你们会如何建议我改进此性能?

提前致谢。

【问题讨论】:

    标签: android performance bitmap drawing


    【解决方案1】:

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

    使用得当,drawbitmap确实应该很快;它只不过是一个复制命令。我什至不会在本地画圆圈;我有预渲染圆圈的位图。

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

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

    我的第一个怀疑是你的大部分 CPU 时间都花在了碰撞检测上。与绘制位图不同,这通常随着交互对象数量的平方而上升,因为必须测试每个对象是否与其他对象发生碰撞。您将游戏对象的数量增加了一倍,但您的表现下降到四分之一,即根据对象数量的平方。如果是这种情况,请不要绝望;有一些方法可以进行碰撞检测,但不会随着对象数量的平方而增长。

    与此同时,我会进行基本测试。如果你实际上没有画出一半的对象会发生什么?游戏运行速度更快吗?如果不是,那与绘画无关。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我在性能方面遇到了类似的问题 - 即,级别 1 运行良好,而级别 2 则没有

        原来不是渲染有问题(至少不是具体的)。这是导致瓶颈的关卡逻辑特有的其他东西。

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

        方法分析显示了 CPU 将时间花在哪里以及为什么会发生帧速率故障。 (顺便说一句,Level 2 的渲染成本也更高,但不是瓶颈)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-19
          • 2014-09-25
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 2014-03-15
          相关资源
          最近更新 更多