Android:Canvas.DrawBitmap VS Drawable.Draw - 巨大的性能提升

标签 android

我刚刚发现了一些东西,我想知道如何以及为什么。 我正在为 Android 开发一款小型街机游戏。我决定忽略 OpenGL 并使用标准的 SurfaceView 和 Drawables 来完成它,因为它应该很轻(大约 10 个 Sprite )。 我有我加载的可绘制对象,我使用方法 Draw 并将它们传递给我的 Canvas 。这就是每个 Sprite 被绘制到屏幕上的方式。 事实证明,在非全新手机型号上绘制 4-5 个大 Sprite (200X400 左右)需要很长时间。足够长的时间让我的游戏无法玩。我们正在谈论使用此方法绘制单个帧需要 50-60 毫秒。除了画画,我真的什么都不做,我无处可以削减成本。所以我决定尝试使用位图。然而,在这里,我需要预先设置大小,因为位图中没有“setBounds”方法。没问题,我在加载时调整它们的大小以适应我当前的屏幕,问题解决了。

好的。所以我得到了位图。我现在使用 Canvas.DrawBitmap 进行绘制。我对新的绘制方法进行了基准测试.. 我得到了惊人的 400% 性能提升! 整个绘制循环现在需要 8-12 毫秒,而不是 50-60 毫秒。 什么鬼?? 为了排除它,我也对 setBounds 进行了计时,它需要 <1 毫秒,所以这不是罪魁祸首。真正的 Drawable.Draw 会减慢速度。

对我来说这是个好消息,因为我真的不想学习 OpenGL 来让我的游戏可玩,但我不禁想知道 - 可以吗?我的方法有问题吗?为什么在任何地方都没有提到它?

最佳答案

CanvasSurfaceView 是为了在您应该不断迭代而 Drawable 不用于此目的时使用。

关于Android:Canvas.DrawBitmap VS Drawable.Draw - 巨大的性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296441/

相关文章:

java - TimePicker 在获取分钟和小时时导致应用程序崩溃

android - 在构建文件中启用数据绑定(bind)会使 transformDexArchiveWithExternalLibsDexMergerForDebug 任务失败

android - 改造:2.0.0-beta2 发布文件数组

javascript - 链接到计时器 Android 的微调器

java - 将数组列表传递给 fragment ?

Android 如何使用图像的获取设置方法?

java - 使用 BitmapFactory.decodeFile 加载 PNG 随机非常慢

java - getString ("K") 是否能够从 json 对象中提取 int 值?

android - 在 android 12 上显示长文本 toast

Android-如何在 textview 上显示文本选择?