AS3在GPU模式下渲染位图

时间:2015-03-21 11:02:09

标签: android actionscript-3 flash bitmap gpu

Flash Pro CC,AS3,Air for Android(v17),渲染模式GPU,舞台质量。低,FPS:60,测试设备:旧的Nexus One智能手机(Android 2.3.3)。

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

所以我有49个单独的位图正方形覆盖舞台,中间有一个MovieClip,内部有一个位图,可以上下移动(跳球)。很简单吧?

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

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

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

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

  4. 所有3种情况都发生了什么?为什么我需要将位图放入一个MC并将此MC缓存为位图 - 这些方块是否已经是位图?

    我还试图让每个方块成为一个MovieClip并将其缓存为位图,但我仍然有55 fps。

    是否可以将方块分开为60 fps?

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

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

    谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这与best practice recommendation

有关
  

限制舞台上可见的项目数量。每个项目都需要一些时间   与周围的其他项目进行渲染和合成。当你没有   更长的想要显示一个显示对象,将其visible属性设置为   假。不要简单地将它移离舞台,将其隐藏在另一个物体后面,   或将其alpha属性设置为0.如果不再显示对象   需要的是,使用removeChild()将其从舞台中删除。

通过将所有位图放在一个容器中并设置cacheAsBitmap=true,就合成器而言,实质上是将它们转换为单个位图。这比单个位图的复合速度更快。将位图设置为cacheAsBitmap=true(或在cacheAsBitmap=true的单个容器中)无效,因为它已经是位图。

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

希望有所帮助。