3

ええ、別の簡単な初心者向け as3 の質問です。

「.name」でムービークリップを参照するにはどうすればよいですか?

解決策を探してみましたが、何も見つかりませんでした。基本的に、ループを使用して一連のムービークリップをステージに追加したので、それらを区別する方法は、「something」+ループの「i」の .name を与えることでした。そのため、「something1」、「something2」、「something3」などの名前が付けられています。

ここで、特定のフレームに送信する必要があります。通常、私は次のようなことをします:

something1.gotoAndStop(2);

ただし、「something1」はインスタンス名ではなく、単なる「.name」です。参照する方法が見つかりません。

4

3 に答える 3

7

getChildByName( "name")を使用したい詳細情報

インポートflash.display.MovieClip;

// create boxes
for(var i:int = 0 ; i < 4; i++){

    var box:MovieClip = new myBox(); // myBox is a symbol in the library (export for actionscript is checked and class name is myBox

    box.name = "box_" + i;
    box.x = i * 100;
    this.addChild(box);

}

// call one of the boxes

var targetBox:MovieClip = this.getChildByName("box_2") as MovieClip;
targetBox.gotoAndStop(2);
于 2012-07-26T17:07:41.427 に答える
2

名前でアクセスすると、エラーが発生しやすくなります。あなたが初心者なら、それは良い習慣ではありません。これを行うためのより安全な方法は、ループ内で作成しているものへの参照を配列などに保存し、それらのインデックスでそれらを参照することだと思います。

例:

var boxes:Array = [];
const NUM_BOXES:int = 4;
const SPACING:int = 100;

// create boxes
for(var i:int = 0 ; i < NUM_BOXES:; i++){

    var box:MovieClip = new MovieClip(); 

    // You can still do this, but only as a label, don't rely on it for finding the box later!
    box.name = "box_" + i; 
    box.x = i * SPACING;
    addChild(box);

    // store the box for lookup later.
    boxes.push(box); // or boxes[i] = box;
}

// talk to the third box
const RESET_FRAME:int = 2;
var targetBox:MovieClip = boxes[2] as MovieClip;
targetBox.gotoAndStop(RESET_FRAME);

また、緩い数値の多くを定数と変数に置き換えたことに注意してください。これにより、コンパイラーがエラーに気付くのにも役立ちます。

于 2012-07-26T21:04:09.800 に答える
1

親を使用して、名前で子を取得できます。親がステージの場合:

var something1:MovieClip = stage.getChildByName("something1");
something1.gotoAndStop(2);
于 2012-07-26T17:08:36.510 に答える