1

わかりましたので、子がいつムービークリップ「x」に追加されたかを把握しようとしており、この「x」ムービークリップ内からこの操作を処理/迂回しています。

addChild と addChildAt を優先せずにオーバーライドしようとしました。フラッシュを介してステージに配置されたムービークリップは、依然として addChild または addChildAt をトリガーしません。ただし、トレースthis.numChildrenでは「2」が正しく表示されます。

ヒントはありますか?

4

2 に答える 2

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

于 2011-04-12T08:41:36.447 に答える
1

次のようにして、ムービークリップのデフォルトのメソッドをオーバーライドできます。

ムービークリップを拡張するクラスを作成します。

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

于 2011-04-12T08:42:23.187 に答える