错误/功能:
- 创建一个精灵
- 将其添加到显示列表
- 为精灵添加一个 REMOVED_FROM_STAGE 监听器
- 移除精灵
- 处理函数错误地仍然报告仍在显示列表中
这是我在更复杂的应用程序中面临的一个问题,但我在这里将其缩小到它的基础。当处理程序为 REMOVED_FROM_STAGE 触发时,currentTarget 仍然显示在显示列表中。我需要能够检测它和其他对象是否在此函数的显示列表中,但是在处理程序完成其操作之前,关于 currentTarget 的所有信息似乎都是不正确的。起初我以为这是渲染或帧问题,但我的输出显示它实际上更多是 remove() 命令内部发生的问题。缺乏一个kludge解决方案,有人知道为什么会发生这种情况吗?
import flash.display.Sprite;
import flash.events.Event;
var sprite:Sprite = new Sprite();
addChild(sprite);
sprite.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
removeChild(sprite);
output();// shows it has been removed. No parent, no stage
function removedFromStageHandler(event:Event):void{
output();// Still in displaylist? Has parent and stage
}
function output():void{
trace("object = " + sprite);
trace(" parent = " + sprite.parent);
trace(" stage = " + sprite.stage);
}
注意:ADDED_TO_STAGE 不存在这种奇怪的行为,因为对象在处理程序中报告其属性正确。