ADDED_TO_STAGE的触发时机
Adobe的help文件说,这个event的触发时机是:
The following methods trigger this event: DisplayObjectContainer.addChild(), DisplayObjectContainer.addChildAt().
这个很容易给人误导。设想一下有显示对象A、B、C,他们的关系如下:
B.addChild(C); |
当我们在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
事件中移除注册的事件,其实很可能事件移除是不会被调用的。切记!