我知道addChild
(1)将对象添加到DisplayObjectContainer
中的display container object和{2} shows the object中。我想知道的是当一个对象被添加到DisplayObjectContainer
?
总结我的问题是(是),
addChild
时是否有 magic ?例如,某事正在发生,例如DisplayObjectContainer
。A
和B
。 B
有A
作为其中的一部分。我在addChild (A)
中致电B
。在MainTimeline
和Stage
,我不会致电addChild (B)
。视觉上,由于尚未添加B
,因此A
也不会存在。但是,A
是否存在(例如分配的内存),即使它不在Stage
上?我一直在搜索这里和那里,但是与我有关的大量问题都是技术问题。我非常感谢有关我的问题的任何答案或指针
答案 0 :(得分:2)
以下是对所发生情况的简要说明。
使用new
关键字创建MovieClip A(或任何对象)时(或者如果使用FlashPro在播放头所在的时间轴上存在的项目),该对象将在内存中。因此,无论MovieClip A是否在显示列表中,它都占用了应用程序中的内存。
当您使用addChild
时,以下是发生的事情的某些(不一定按顺序):
如果要添加的对象已经具有父级,则会从该父级中删除它(虽然保留了比例和位置,现在将相对于新父级)。
将在新父级(以及旧父级,如果适用)上调度事件。旧父母的Event.ADDED
和Event.ADDED_TO_STAGE
+ Event.REMOVED / REMOVED_FROM_STAGE
。
新添加的对象的父级现在将考虑新的子/孙。像命中测试,界限和鼠标等等。
在下一帧勾号(舞台的刷新率)上,将绘制该项目
所有这一切,一旦movieClip在显示列表中,就会有性能消耗VS只在内存中有该对象 - 所以如果不需要看到一个对象,将它从显示列表中删除会更有效率直到它需要被看到。
如果使用FlashPro / Animate,您还应该知道,如果通过代码执行操作时间轴显示对象(addChild / removeChild / setChildIndex等)的父项的任何操作,该时间轴对象将不再由时间轴管理。这意味着如果你有一个空的关键帧来从时间轴中删除一个项目,那么该项目将实际停留在屏幕上,直到你明确删除它(removeChild(item)
)或它的父项消失为止。