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
所有图形都是位图(不是矢量)。然而我得到55 fps(它在53-57之间变化)。
然后我选择所有49个方格并将它们放在一个符号(MovieClip)中。视觉上没有任何变化。它似乎稍微增加了FPS,平均fps现在是~57(55-59)。
然后我拍摄MovieClip(里面有所有方块)并设置cacheAsBitmap = true。瞧,现在我有60 fps!
所有3种情况都发生了什么?为什么我需要将位图放入一个MC并将此MC缓存为位图 - 这些方块是否已经是位图?
我还试图让每个方块成为一个MovieClip并将其缓存为位图,但我仍然有55 fps。
是否可以将方块分开为60 fps?
在我的真实项目中,我在舞台上有很多MovieClip(~100),但在大多数情况下,其中只有一个是动画的。但不知何故,似乎仅存在其他影片剪辑会降低性能(fps)。显然,我不能将它们全部放入一个MC并将其缓存为位图,如上面的简化示例所示。
我该如何解决这个问题,我该怎么办?
谢谢!
答案 0 :(得分:0)
我认为这与best practice recommendation:
有关限制舞台上可见的项目数量。每个项目都需要一些时间 与周围的其他项目进行渲染和合成。当你没有 更长的想要显示一个显示对象,将其visible属性设置为 假。不要简单地将它移离舞台,将其隐藏在另一个物体后面, 或将其alpha属性设置为0.如果不再显示对象 需要的是,使用removeChild()将其从舞台中删除。
通过将所有位图放在一个容器中并设置cacheAsBitmap=true
,就合成器而言,实质上是将它们转换为单个位图。这比单个位图的复合速度更快。将位图设置为cacheAsBitmap=true
(或在cacheAsBitmap=true
的单个容器中)无效,因为它已经是位图。
另请注意,不再推荐GPU模式,这是Adobe首次尝试GPU加速显示,他们基本上放弃了这条路径,转而支持新的Stage3D
渲染管道。虽然GPU渲染模式在正确使用时可以很好地工作,但它可能会有些不可预测和令人困惑,所以我强烈建议您查看Stage3D。
希望有所帮助。