2

错误/功能:

  1. 创建一个精灵
  2. 将其添加到显示列表
  3. 为精灵添加一个 REMOVED_FROM_STAGE 监听器
  4. 移除精灵
  5. 处理函数错误地仍然报告仍在显示列表中

这是我在更复杂的应用程序中面临的一个问题,但我在这里将其缩小到它的基础。当处理程序为 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 不存在这种奇怪的行为,因为对象在处理程序中报告其属性正确。

4

1 回答 1

1

来自 adobe 文档:

removedFromStage 事件当显示对象即将从显示列表中删除时调度,更多信息在这里

所以这是预期的行为,事件在项目从舞台上移除之前被调度,当调度完成时元素被移除。这使您可以在删除项目之前执行诸如运行操作之类的操作,甚至根据某些条件阻止删除。

于 2012-10-11T17:45:42.703 回答