AS3的addChild如何工作?

时间:2016-06-14 16:44:09

标签: actionscript-3

我知道addChild(1)将对象添加到DisplayObjectContainer中的display container object和{2} shows the object中。我想知道的是当一个对象被添加到DisplayObjectContainer

时会发生什么

总结我的问题是(是),

  1. 调用addChild时是否有 magic ?例如,某事正在发生,例如DisplayObjectContainer
  2. 比方说,我有MovieClip ABBA作为其中的一部分。我在addChild (A)中致电B。在MainTimelineStage,我不会致电addChild (B)。视觉上,由于尚未添加B,因此A也不会存在。但是,A是否存在(例如分配的内存),即使它不在Stage上?
  3. 我一直在搜索这里和那里,但是与我有关的大量问题都是技术问题。我非常感谢有关我的问题的任何答案或指针

1 个答案:

答案 0 :(得分:2)

以下是对所发生情况的简要说明。

使用new关键字创建MovieClip A(或任何对象)时(或者如果使用FlashPro在播放头所在的时间轴上存在的项目),该对象将在内存中。因此,无论MovieClip A是否在显示列表中,它都占用了应用程序中的内存。

当您使用addChild时,以下是发生的事情的某些(不一定按顺序):

  1. 如果要添加的对象已经具有父级,则会从该父级中删除它(虽然保留了比例和位置,现在将相对于新父级)。

  2. 将在新父级(以及旧父级,如果适用)上调度事件。旧父母的Event.ADDEDEvent.ADDED_TO_STAGE + Event.REMOVED / REMOVED_FROM_STAGE

  3. 新添加的对象的父级现在将考虑新的子/孙。像命中测试,界限和鼠标等等。

  4. 在下一帧勾号(舞台的刷新率)上,将绘制该项目

  5. 所有这一切,一旦movieClip在显示列表中,就会有性能消耗VS只在内存中有该对象 - 所以如果不需要看到一个对象,将它从显示列表中删除会更有效率直到它需要被看到。

    如果使用FlashPro / Animate,您还应该知道,如果通过代码执行操作时间轴显示对象(addChild / removeChild / setChildIndex等)的父项的任何操作,该时间轴对象将不再由时间轴管理。这意味着如果你有一个空的关键帧来从时间轴中删除一个项目,那么该项目将实际停留在屏幕上,直到你明确删除它(removeChild(item))或它的父项消失为止。