2009-10-30 55 views
2

之間標識AS3中的MovieClip,如果我循環播放影片剪輯的子項,它將返回DisplayObjectContainer,它是DisplayObject的列表。在ActionScript3中的DisplayObjectContainer

但是,AS3 typeof無法識別MovieClip,因爲MovieClip現在是一個對象,而不是數據類型。我如何正確識別MovieClip?

我發現3個解決方案,在線:

解決方案1(我使用的解決方案):

首先將影片剪輯名稱爲 特定的名稱,然後在迭代 過程中,檢查使用child.name.indexOf( 「specificName」)> -1

解兒童 的名稱2:

使用child.hasOwnProperty( 「numChildren的」),以識別一個MovieClip

解決方案3:

使用第三方插件等的FlashDevelop

其解決方案是最好?或者有沒有其他的選擇?

回答

8

它在AS3中實際上有了很大的改進和簡化。您可以簡單地使用「is」運算符:

for(var i:int = 0; i < containerObj.numChildren; i++) { 
    if(containerObj.getChildAt(i) is MovieClip) { 
     // do something 
    } 
} 

Flash livedocs for this topic有一些更多的細節。

1

使用is關鍵字建議使用richleland。

道歉提前爲挑剔的,但我忍不住說:

  • getChildAt回報DisplayObject,不DisplayObjectContainer你在問題中提出。
  • numChildrenDisplayObjectContainer類的一個屬性,並且MovieClip不是它的唯一派生類。 Loader,StageSprite延伸DisplayObjectContainerMovieClipSprite的一個子類。因此,如果你想在孩子上使用像gotoAndStop這樣的動畫片段特定動作,numChildren技巧會失敗。
  • 比較名稱的正確方法是child.name == "specificName",除非您將「specificName」用作所有影片剪輯的子項的前綴或後綴。