ADDED_TO_STAGE的触发时机

Adobe的help文件说,这个event的触发时机是:

The following methods trigger this event: DisplayObjectContainer.addChild(), DisplayObjectContainer.addChildAt().

这个很容易给人误导。设想一下有显示对象A、B、C,他们的关系如下:

1
2
3
B.addChild(C);
A.addChild(B);
stage.addChild(A);

当我们在ADDED_TO_STAGE事件,什么时候会触发呢?是在
B.addChild(C);的时候?还是在
A.addChild(B);的时候?还是在
stage.addChild(A);的时候?

答案是在stage.addChild(A);的时候,ADDED_TO_STAGE事件才会触发。

所以,在程序里,一定要Event.ADDED_TO_STAGE和Event.REMOVED_FROM_STAGE同时出现,这样会减少很多Bug。因为如果Event.ADDED_TO_STAGE没有触发,Event.REMOVED_FROM_STAGE也是铁定不会触发的。

 

有一种错误的使用方法是,把事件注册写在构造函数里面,然后在Event.REMOVED_FROM_STAGE事件中移除注册的事件,其实很可能事件移除是不会被调用的。切记!