2

ActionScript 3では、ムービークリップの子をループすると、DisplayObjectのリストであるDisplayObjectContainerが返されます。

ただし、AS3 typeofは、MovieClipがデータ型ではなくオブジェクトになっているため、MovieClipを識別できません。MovieClipを正しく識別するにはどうすればよいですか?

私はオンラインで3つの解決策を見つけました:

解決策1(私が使用している解決策):

最初にMovieClip名を特定の名前に設定し、次に反復プロセスで、child.name.indexOf( "specificName")>-1を使用して子の名前を確認します。

解決策2:解決策2:

child.hasOwnProperty( "numChildren")を使用してMovieClipを識別します

解決策3:

FlashDevelopのようなサードパーティのプラグインを使用する

どのソリューションが最適ですか?または代替手段はありますか?

4

2 に答える 2

9

AS3では、実際には大幅に改善および簡素化されています。「is」演算子を使用するだけです。

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

このトピックのFlashライブドキュメントには、もう少し詳細があります。

于 2009-10-30T02:52:49.397 に答える
1

isrichlelandが提案したようにキーワードを使用します。

事前にお詫び申し上げますが、私はそれを言うのに抵抗できませんでした:

  • getChildAt質問で提案したようにではDisplayObjectなく、を返します。DisplayObjectContainer
  • numChildrenDisplayObjectContainerはクラスのプロパティでありMovieClip、その派生クラスだけではありません。LoaderStageおよびSprite拡張しDisplayObjectContainerます。MovieClipのサブクラスですSpritegotoAndStopしたがって、子のようにムービークリップ固有のアクションを使用したい場合、numChildrenトリックは失敗します。
  • 名前を比較する適切な方法は、child.name == "specificName"ムービークリップであるすべての子のプレフィックスまたはサフィックスとして「specificName」を使用していない場合です。
于 2009-10-30T05:20:15.193 に答える