0

私はそれを持っていると思ったが、それでも私のmovieClipをplay()にさせることができない。ロールオーバー時に「updateBomb」関数になっているというトレースを取得していますが、currentBombはフレーム2に移動して再生されません。なぜこれが起こっているのか考えはありますか?ムービークリップがコンテナMCにあることが原因でしょうか?

     function getStarted(event:MouseEvent){
         startClip.removeEventListener(MouseEvent.ROLL_OVER, getStarted);

         for (var i:int = 1; i < 11; i++) {

             var currentBomb:MovieClip = bombClip["bomb_" + i];

             trace(currentBomb);
            currentBomb.addEventListener(MouseEvent.ROLL_OVER, function (evt:MouseEvent):void { updateBomb(currentBomb); });
            }

            bombClip.play();


     }

function updateBomb(currentBomb:MovieClip):void {
    trace("in update bomb");
    trace(currentBomb);
    currentBomb.gotoAndPlay(2);
}

updateBombにtracecurrentBombを追加しましたが、これが取得したものです

[object bombNum1_5]
in update bomb
[object bombNum1_5]
in update bomb
[object bombNum1_5]
in update bomb
[object bombNum1_5]
in update bomb
[object bombNum1_5]
in update bomb
[object bombNum1_5]

別の爆弾をロールオーバーしたとき。爆弾を名前で参照する必要がありますか?

4

1 に答える 1

1

匿名関数を使用してイベントリスナーを追加し、currentBombをマウスロールオーバーハンドラーに格納してクロージャを作成します。

ただし、そのcurrentBomb変数はループ内で変更されています。そして、各無名関数にはそれへの参照があります。したがって、各ムービークリップにマウスを合わせると、すべて同じ爆弾(ループの最後の爆弾)を指します。

匿名関数を使用する代わりに、以下のようなイベントリスナーを追加するだけです。イベントハンドラーは、イベントがから発生したという事実に依存して、そのメソッドMovieClipを呼び出すことができます。gotoAndPlay()

// inside the for loop...
currentBomb.addEventListener(MouseEvent.ROLL_OVER, updateBomb);

// roll over event handler
function updateBomb(event:MouseEvent):void
{
    var currentBomb:MovieClip = event.target as MovieClip;
    if (currentBomb) // is null if above line fails
        currentBomb.gotoAndPlay(2);
}
于 2012-08-17T05:48:39.593 に答える