AS3中的getChildByName

【轉載的。。。。。。。。。。。。。。。】this

在AS3中,咱們能夠用getChildByName來獲取一個元件,可是要注意返回的類型是DisplayObject,這樣一旦咱們的元件中有一些自定義的方法就不能使用了。spa

好比我有一個類Ball,Ball有一個方法move,那麼我能夠這樣寫:對象

var b:Ball=new Ball();ip

addChild(b);字符串

b.move();//這樣沒問題get

getChildByName(」b」).move();//這樣編譯時會報錯編譯器

其緣由應該就是getChildByName返回的類型是DisplayObject,而並非Ball,因此沒法調用Ball的方法。編譯

若是這樣寫:class

var c:Ball= getChildByName(」b」) as Ball;方法

c.move();

這樣就沒問題了,編譯經過,能夠調用Ball的方法。

 

下面是我本身的總結:

getChildByName方法是用於元件動態命名時的。例如:在場景中有一個元件,在屬性面板中對其命名爲cc,在對其操做時就能夠寫 cc.y=XXX;而動態命名時,就如上面的例子,場景中本沒有這個元件,用addChild將其放到場景中時再對其命名,這時要對這個元件進行操做就要 用到getChildByName了,再舉例以下:

var b:Ball=new Ball()

addChild(b)

b.name="mc1"

getChildByName("mc1").y=200

 

補充:

例如場景中有一元件mc1,如今用一個字符串來表示它,而且利用這段字符串來調用它的屬性或方法:

var cc="mc1"

getChildByName(cc).XXX

這時若是是自定義的屬性或方法的話,會報錯,由於AS3認不出來被操做的對象是何類型的,這就須要咱們來告訴它,有兩種方法解決這個問題:

1、將getChildByName(cc)改爲MovieClip(getChildByName(cc)),意思是先用getChildByName 將cc這個字符串變成DisplayObject,而後再將它變爲MovieClip,這時AS3認出它是一個MovieClip了,就能夠訪問它的屬性 和調用它的方法了。

2、將語句寫成:

var cc:MovieClip=mc1

this["cc"].XXX

 

另外還有一種字符串的寫法:

var cc=mc1.name

this["cc"].XXX

這裏mc1.name必須是在屬性面板裏命名的,而不是mc1.name="XXX"命名的

[]在這裏就是動態的意思,被操做的對象的類型是動態的,這樣就能夠繞過AS3的編譯器了

相關文章
相關標籤/搜索