2009-08-09 11 views
1

Flash CS3 Proを使用して、基本的なActionScript 3で簡単に遊んでいます。ActionScript 3 MovieClipクラスのリンケージ

は、I nは「brander」のシンボルを複製するキーフレームに、この非常に簡単なコードを置く:

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; 
     } 
    } 
} 

、それはあまりにも簡単です。

Now:私はこのクラスでは何も設定できないことに気付きました。だから、setName( "brander"インスタンスの作成時)を呼び出すときに、私は何も設定しません。これは可能ですか?

私は単純に書き込むことで、デバッグなしでテスト:このクラスは、情報を保存することができないとき

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

は、なぜ我々は、クラスをリンクしていますか?私は間違って何をしていますか?


EDIT:

私はこれが働いているが見つかりました:

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

が、私は理由を理解することはできません:あなたはなぜ私に教えてくださいだろうか?

答えて

1

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

casting,polymorphismおよびinheritanceについては、インターネット上のいくつかの場所に関する多くの情報があります。

+0

OOPの点で実際にキャスティングなどが何であるか知っています。経験豊富なAS1とAS2の開発者(ゆっくりとゆっくりとAS3に移行)は、プログラミング関連の問題ではなく、Flashのオーサリングの問題だと思っていました。答える時間をとってくれてありがとう。 –

関連する問題