0

ホルダー ムービークリップがあり、その基本クラスは foo です。

package {
    import flash.display.MovieClip;

    public class Foo extends MovieClip {
        public function Foo() {
            trace("foo");
        }
    }
}

foo 内には、bar の基本クラスを持つ他の多くのムービークリップがあります。

package {
    import flash.display.MovieClip;

    public class Bar extends MovieClip {
        public function Bar() {
            trace("bar");
        }
    }
}

bar のコンストラクターにトレースを入れて、適切にロードされているかどうかを確認できるようにします。foo をシーンにドラッグしてクリップを実行すると、その中のすべての小さなバーが正しく起動します。ただし、 Main クラスで次のように動的にシーンに追加すると、次のようになります。

package {
    import flash.display.MovieClip;

    public class Main extends MovieClip {
        public function Main() {
            this.addChild(new Foo());
        }
    }
}

突然、foo 内のすべての小さなバー ムービークリップが通常の古いムービークリップに戻り、起動しなくなります。これを修正する方法はありますか?

4

1 に答える 1

0

getChildAt() は DisplayObject を返します。Bar メソッド/プロパティにアクセスするには、Bar オブジェクトとして明示的にキャストする必要があります。

例のコードを使用して...

public class Main extends MovieClip {
    public function Main() {
        var foo:Foo = new Foo();
        stage.addChild(foo);
        foo.x = 0;
        foo.y = 0;

        trace(foo.getChildAt(1) as Bar);
    }//Main()
}

奇妙なことに、(非常に奇妙なことに) Foo 内のオブジェクトを Bar 型として宣言するコードがどこかにない限り、Flash は Bar のカスタム コンストラクターを実行しないことに気付きました。上記の 1 つのトレース ステートメントを (getChildAt の戻り値をキャストするように) 変更するだけで、Foo 内に存在するすべての Bar オブジェクトがカスタム コンストラクターを実行しました。図に行きます。

于 2010-12-19T16:12:35.500 に答える