バグ/機能:
- スプライトを作成する
- 表示リストに追加します
- スプライトに REMOVED_FROM_STAGE リスナーを追加する
- スプライトを削除
- ハンドラー関数が間違って、まだ表示リストにあると報告する
これは、はるかに複雑なアプリケーションの一部として直面している問題ですが、ここではその基本に絞り込みました。REMOVED_FROM_STAGE のハンドラーが起動すると、currentTarget がまだ表示リストにあるように見えます。それと他のオブジェクトがこの関数内の表示リストにあるかどうかを検出できるようにする必要がありますが、ハンドラーが操作を完了するまで、currentTarget に関するすべての情報が正しくないように見えます。最初は、これはレンダリングまたはフレームの問題だと思っていましたが、私の出力では、実際には remove() コマンドの内部で発生する問題の方が問題であることが示されています。クラッジソリューションの不足で、誰かがなぜこれが起こるのかについての洞察を持っていますか?
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 には存在しません。これは、オブジェクトがハンドラー内でそのプロパティを正しく報告するためです。