如何让Flash不在舞台上渲染对象?

时间:2008-10-04 11:58:10

标签: flex flash actionscript-3 optimization

这个讨论开始over here,但我认为最好有一个明确的答案......

因此,假设你在舞台上有MovieClip(或者是Flex观众的UIComponent) - 你必须做什么才能使用户看不到对象,以便AVM2不会甚至在为用户渲染舞台时将其考虑在内?

我一直以为答案是设置visible = false,但有一个论点是对象必须放在舞台的边界之外(如x = 2000,这似乎是一个黑客IMO)。有谁知道真正的答案?

编辑:我认为让闪光灯无法渲染该项目的必要性将有助于提高性能。

5 个答案:

答案 0 :(得分:3)

正如其他答案所指出的那样,不再需要在舞台外移动剪辑的“黑客”。但是,如果性能很重要,那么设置visible = false; 是一件明智的事情。作为显示列表一部分但设置为不可见的剪辑,如果您有足够的剪辑,仍会产生大量的渲染开销。如果您使用removeChild()将其从播放列表中删除,则不会产生渲染开销(尽管它们仍会占用内存)。

答案 1 :(得分:2)

黑客适用于Flash 8(Actionscript 2)或更低版本。通过升级到Actionscript 3和Flex 2/3设置可见属性就足够了。

答案 2 :(得分:2)

是的,正如设计所说,只需将其从显示列表中删除:

var s:MovieClip = new MovieClip();
s.lineStyle(1, 0xFFFFFF);
addChild(s);//shows in moviea 
removeChild(s);//removes from display list, but you still have a reference to it

我没有测试过,但它应该给你一般的想法。

麦克

答案 3 :(得分:1)

如果您正在使用Flex及其容器布局系统,UIComponent类中的includeInLayout属性在您不想显示某些内容时也很有用:它指定是否要考虑因素测量布局时的组件。

答案 4 :(得分:1)

将其从显示列表中完全删除(removeChild(),removeChildAt()等)。只要您实际上没有将对MovieClip的引用设置为“null”,它仍将保留在内存中,并且可以在需要时再次添加到显示列表中(addChild(),atChildAt()等。)