Android的drawBitmap性能很多的位图?

我正在编写一个Android游戏的过程中,我似乎有绘画到canvas性能问题。 我的游戏有多个级别,每个级别都有(显然)不同数量的对象。

奇怪的是,在一个包含45个图像的水平,运行完美(几乎60帧)。 然而,包含81幅图像的另一个级别几乎没有运行(11 fps)。 这几乎是无法玩的。 除了我以外的人,这似乎很奇怪吗?

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

这里发生了什么? Canvas能不能在每个游戏循环中画出这么多的图像? 你们如何推荐我改善这种performance?

提前致谢。

  • 使用animation类来animation视图内的最佳方法是什么?
  • Android - 如何绘制视图
  • 在android中用边框绘制填充的矩形
  • Android:绘制一个canvas到ImageView
  • 在Android中横向绘制圆形
  • Android:measureText()返回基于比例像素的像素
  • Android:BitmapDrawable.Draw(Canvas)似乎不工作
  • Android作物图像像camscanner
  • 对我来说似乎也很陌生。 我也在开发一个游戏,很多关卡,我可以很容易地在屏幕上有一个100个游戏对象,还没有看到类似的问题。

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

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

    我怀疑你看错了地方。 如果以同样的方式创build和使用相同types的图像,那么加倍屏幕图像的数量不应使性能下降超过4倍。最多只能是线性(2倍)。

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

    同时,我会做基本的testing。 如果你没有真正画出一半的东西,会发生什么? 游戏运行速度快吗? 如果不是这样,那么与绘图无关。

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

    我遇到了类似的performance问题 – 即1级跑得很好,2级没有

    转而不是渲染是一个错误(至less不是特别)。 这是造成瓶颈的关卡逻辑的其他特定情况。

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

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