2

ムービークリップのような視覚要素を参照する 2 つのアプローチを考えます。したがって、ステージ上の a_mc 内に b_mc ( name="b") があるとします。最初のアプローチ:

var mc:MovieClip = a_mc.b_mc

2番目のアプローチ:

var mc:MovieClip = a_mc.getChildByName("b")

私は通常、1番目のアプローチを使用します。2番目のアプローチに行く正当な理由は何ですか。動的に使用すると、ムービークリップに名前を付けるために余分なオーバーヘッドが発生するため、私には役に立たないように思えることがあります。

ありがとうございます。

4

3 に答える 3

3

a.getChildByName('b')を取得するよりも遅いですa.b
名前を使用する必要がない場合、名前を使用しても意味がありませんが、一部のプログラマーは、特に Flash IDE ではなく動的にコンテンツを生成する場合に名前を使用する場合があります。その場合、この関数があると便利です。表示リストをカスタム関数でトラバースする必要はありません (とにかく内部関数で行うため、ab よりも遅くなります)

于 2012-12-12T17:24:11.623 に答える
3

ムービークリップに何かを動的に追加する場合は、getChildByName が必要です。例えば:

var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();
mc2.name = "foobar";
mc1.addChild(mc2);

trace(mc1.foobar); //undefined
trace(mc1["foobar"]); //undefined
trace(mc1.getChildByName("foobar")); //[object MovieClip]

私は通常、オブジェクトを参照するときに mc1["foobar"] を実行します。これは、mc1["foobar_" + i]; などのアイテムを簡単に操作できるためです。

ムービークリップ/テキストフィールドなどとして何かを渡そうとするたびに手動キャストが必要になるため、 getChildByName を使用することはめったにありません:)

ただし、Flash エディターからインスタンスを作成する場合は、通常、エクスポートされたクラスを介してインスタンスを参照し、 mc1.mc2.mc3.optionsView.visible

于 2012-12-12T14:47:36.683 に答える
1

プログラムで処理する必要があるオブジェクトのリストがある場合は、getChildByName が最適です。for ループでインデックスを再作成するために、何らかのプログラム的な方法でそれらに名前を付けたことも想定されます。名前やオブジェクトを配列にプッシュするなど、これを使用する他のいくつかの良い方法を考えることもできます。これにより、それらが関連している必要がなくなり、すべてが共通のプロパティまたはメソッドを持つだけになります。

for(var i:int = 0;i<numOfMC;i++) {
    theParent.getChildByName("child"+i).doSomething();
}
于 2012-12-12T14:05:29.453 に答える