GPU 模式下的 AS3 渲染位图

AS3 rendering bitmaps in GPU mode

Flash Pro CC,AS3,Air for Android (v17),渲染模式 GPU,stage quality.LOW,FPS:60,测试设备:旧的 Nexus One 智能手机(Android 2.3.3).

指南说 GPU 使渲染位图变得便宜,不知何故我无法理解它是如何工作的。

所以我有 49 个独立的位图方块覆盖舞台,中间有一个 MovieClip,里面有一个补间的位图可以上下移动(跳球)。很简单吧?

这是视图:http://i.stack.imgur.com/EKcJ6.png

  1. 所有图形都是位图(不是矢量图)。然而我得到 55 fps(它在 53-57 左右变化)。

  2. 然后我 select 所有 49 个正方形并将它们放在一个符号 (MovieClip) 中。视觉上没有任何变化。似乎稍微增加了 FPS,平均 fps 现在是 ~57 (55-59)。

  3. 然后我使用 MovieClip(里面有所有方块)并设置 cacheAsBitmap=true。瞧,现在我有 60 fps!

这 3 种不同的情况都发生了什么?为什么我需要将位图放入一个 MC 并将此 MC 作为位图缓存 - 方块不是已经是位图了吗?

我也尝试过让每个方块成为一个 MovieClip 并将其缓存为位图,但我仍然得到 55 fps。

是否可以保持 60 fps 的方块分离?

在我的真实项目中,舞台上有很多 MovieClips (~100),但在大多数情况下,一次只有其中一个动画。然而不知何故,似乎仅仅存在其他动画片段就会降低性能 (fps)。显然,我不能像上面的简化示例那样将它们全部放入一个 MC 并将其缓存为位图。

我该如何解决这个问题,我该怎么办?

谢谢!

我认为这与此有关 best practice recommendation:

Limit the numbers of items visible on stage. Each item takes some time to render and composite with the other items around it. When you no longer want to display a display object, set its visible property to false. Do not simply move it off stage, hide it behind another object, or set its alpha property to 0. If the display object is no longer needed at all, remove it from the stage with removeChild().

通过将所有位图放在一个容器中并设置 cacheAsBitmap=true,就合成器而言,您实际上是将它们变成单个位图。这往往比多个单独的位图更快地合成。将位图设置为 cacheAsBitmap=true(或在具有 cacheAsBitmap=true 的单个容器中)没有任何效果,因为它已经是位图。

另请注意,不再推荐使用 GPU 模式,这是 Adob​​e 首次尝试使用 GPU 加速显示,他们基本上放弃了这条道路,转而支持新的 Stage3D 渲染管道。虽然 GPU 渲染模式在使用得当时可以很好地工作,但它可能有些不可预测和令人困惑,所以我强烈建议您查看 Stage3D。

希望对您有所帮助。