这个讨论开始over here,但我认为最好有一个明确的答案......
因此,假设你在舞台上有MovieClip(或者是Flex观众的UIComponent) - 你必须做什么才能使用户看不到对象,以便AVM2不会甚至在为用户渲染舞台时将其考虑在内?
我一直以为答案是设置visible = false
,但有一个论点是对象必须放在舞台的边界之外(如x = 2000
,这似乎是一个黑客IMO)。有谁知道真正的答案?
编辑:我认为让闪光灯无法渲染该项目的必要性将有助于提高性能。
答案 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()等。)