1

Flash CS3 Pro を使用して基本的な ActionScript 3 をいじっているだけです。

n 個の「ブランド」シンボルを複製するためのこの非常に単純なコードをキーフレームに入れました。

for (var i:Number=0; i<20; i++) {
    var m = new brander("MS_"+i);
    addChild(m);
    m.name = "MS_"+i;
    m.x = 20*i;
    m.alpha = a;
    a-=0.05;
    m.y = 20;
}

シンボルは brander.as クラスにリンクされています。

クラスはこれです:

package {
    import flash.display.*;
    public class brander extends MovieClip {
        var n:String;
        //
        public function brander(name) {
            setName(name);
        }
        //
        function setName(name) {
            this.n = name;
        }
        //
        function getName() {
            return n;
        }
    }
}

それも簡単です。

今: このクラスでは何も設定できないことに気付きました。そのため、(「ブランド」インスタンスの作成時に) setName を呼び出すときは、何も設定しません。これは可能ですか?

次のように書くだけで、デバッグなしでテストしました。

btn.addEventListener(MouseEvent.MOUSE_DOWN, test);
//
function test(EVT) {
    trace(this.getChildByName("MS_2").getName());
}

クラスが情報を保存できないのに、なぜクラスをリンクするのでしょうか? 私は何を間違っていますか?


編集:

これが機能していることがわかりました:

function fun(EVT) {
    trace((this.getChildByName("M_2") as brander).getName());
}

理由がわかりません。理由を教えてください。

4

1 に答える 1

1

その理由は、getChildByName() 関数が DisplayObject を返すためです。DisplayObject には getName 関数がありません。ただし、ブランダー クラスは DisplayObject を継承 (拡張) するため、DisplayObject として格納できます。ただし、ブランダー関数のいずれかを呼び出したい場合は、最初に as を使用してそれを brander にキャストする必要があります。

インターネット上のいくつかの場所で、キャストポリモーフィズム、および継承に関する多くの情報があります。

于 2009-08-09T13:28:39.430 に答える