AS3: Определение, когда DisplayObject был удален со сцены? - PullRequest
0 голосов
/ 03 марта 2012

Событие REMOVED_FROM_STAGE вызывается до , когда объект фактически удаляется со сцены.Я ищу эффективный способ узнать, когда объект окончательно удален.Предложения?

Ответы [ 3 ]

2 голосов
/ 03 марта 2012

Вы можете проверить значение стадии объекта.

if (!object.stage) {
  //not added to display list
} 

Возможно настроить прослушиватель внутри кадра при срабатывании REMOVED_FROM_STAGE.

object.addEventListener(Event.REMOVED_FROM_STAGE, removed, false, 0, true);

private function removed(e:Event):void {
    e.target.removeEventListener(Event.REMOVED_FROM_STAGE, removed);    
    e.target.addEventListener(Event.ENTER_FRAME, checkStage, false, 0, true);
}

private function checkStage(e:Event):void {
    if (!e.target.stage) {
        //object has been removed
        e.target.removeEventListener(Event.ENTER_FRAME, checkStage);
        //do something now it has been removed
    }
}
1 голос
/ 04 марта 2012

Как вы удаляете свой объект?

Последнее событие перед перерисовкой экрана, и вы увидите, что ваш объект был удален, является событием рендеринга.

Не могли бы вы не слушатьдля этого?Как будто объект удален со сцены, сцена должна будет перерисовать себя.

stage.invalidate();
stage.addEventListener(Event.RENDER, doAfter, false, 0, true);
0 голосов
/ 03 марта 2012

Вы всегда можете проверить, является ли родительское свойство целевого объекта нулевым. Когда и как вы это проверяете, зависит от структуры вашего приложения и т. Д.

if (targetObject !== null && targetObject.parent === null) {
    // target object has been removed from display list
} else {
    // target object is still in display list
}
...