答案是“是”。必须 removechild。
开销最大的就是render,其他的,诸如Tweener,数学计算,包括三角,幂,数组遍历,等等,都差着数量级呢。
要优化,先从render开始。
此次彻查发现如下事实:
visible == false的图层还会占用CPU么?不幸的是答案也是肯定的。必须removechild。
频繁的removechild/addchild会令CPU负担很重么?出乎我意料,不重,很轻。
画面大小对性能影响大么?很大,缩小画面可大大减小CPU。
Sprite或UIComponent层数过多会增加负担么?
我在一个动画外套了100个互相嵌套的UIComponent,没感觉效率下降。500个,依然没事。1000个,Firefox死了。
由此衍生的一个猜想,空白UIComponent会影响么?
还是这个实验,100个互相嵌套的UIComponent,只是最上一个没有child,没事。1000个,Firefox没死。
最有效的提高效率的方法是什么呢?
MovieClip.cacheAsBitmap = true;
如果设置为 true,则 Flash Player 将缓存显示对象的内部位图表示形式。 此缓存可以提高包含复杂矢量内容的显示对象的性能。
具有已缓存位图的显示对象的所有矢量数据都将被绘制到位图而不是主显示。 然后,将位图作为贴紧到最接近像素边界的未拉伸、未旋转的像素复制到主显示。 像素按一对一与父对象进行映射。 如果位图的边界发生更改,则将重新创建位图而不会拉伸它。
除非将 cacheAsBitmap 属性设置为 true,否则不会创建内部位图。
将 cacheAsBitmap 属性设置为 true 后,呈现并不更改,但是,显示对象将自动执行像素贴紧。 动画速度可能会大大加快,具体取决于矢量内容的复杂性。
我的项目中活动物体是Flash AuthorTool作的,矢量很多,动作复杂。场景中物体个数为20个的时候就撑不住了。设置cacheAsBitmap后几乎不停顿。效果非常明显。
由此,详细探讨几个问题:
cacheAsBitmap会影响子对象么?如果是,那么只在主场景中设置一次就足够了。
经过大量干瞪眼肉眼观察的实验,答案是“否”。
那么cacheAsBitmap设置的时机就是有关系的了。是否设置cacheAsBitmap时点之后加到该displayobject的child就不被cache了?遗憾的是人肉评价无法鉴别,待我想个办法。