わかりましたので、子がいつムービークリップ「x」に追加されたかを把握しようとしており、この「x」ムービークリップ内からこの操作を処理/迂回しています。
addChild と addChildAt を優先せずにオーバーライドしようとしました。フラッシュを介してステージに配置されたムービークリップは、依然として addChild または addChildAt をトリガーしません。ただし、トレースthis.numChildrenでは「2」が正しく表示されます。
ヒントはありますか?
わかりましたので、子がいつムービークリップ「x」に追加されたかを把握しようとしており、この「x」ムービークリップ内からこの操作を処理/迂回しています。
addChild と addChildAt を優先せずにオーバーライドしようとしました。フラッシュを介してステージに配置されたムービークリップは、依然として addChild または addChildAt をトリガーしません。ただし、トレースthis.numChildrenでは「2」が正しく表示されます。
ヒントはありますか?
x ムービー クリップの「追加」イベントのイベント リスナーを追加できます。
x.addEventListener(Event.ADDED, addHandler);
function addHandler(e:Event){
// your code here
}
このリンクはそれをよりよく説明しているかもしれません: AS3.0 – Event.ADDED and Event.ADDED_TO_STAGE
ドキュメンテーションも良いリソースです: flash.events.Event
次のようにして、ムービークリップのデフォルトのメソッドをオーバーライドできます。
ムービークリップを拡張するクラスを作成します。
package {
import flash.display.*;
public class SuperMovieClip extends MovieClip {
public function SuperMovieClip() {
// constructor code
super();
}
override public function addChild(child:DisplayObject):DisplayObject {
trace("Hello, I am overriding add child");
// still perform the default behavior but you can do what ever you want.
return super.addChild(child);
}
}
}
次に、Flash で新しいムービークリップを作成し、それが ActionScript に対して有効としてマークされていることを確認します。クラスは任意の名前にする必要がありますが、基本クラスは SuperMovieClip (または拡張クラスに選択した名前) にする必要があります。画像を参照してください:

これで、ステージ クリップがこのベース タイプで作成されると (IDE 内にあるかコードを介して作成されたかに関係なく)、SuperMovieClip タイプになり、addChild が呼び出されるたびに、元の関数がオーバーライドされます。
たとえば、デザイン タイムにこの mc のインスタンスをライブラリからステージに配置し、タイムラインで次のコードを使用してコンパイルしました。
import flash.display.Sprite;
stage_mc.addChild(new Sprite());
そして、それは出力しましたHello, I am overriding add child