0

我以为我拥有它,但我仍然无法让我的电影剪辑播放()。我得到了它在翻转时进入“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 中添加了一个跟踪 currentBomb,这就是我得到的

[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 变量正在循环中被更改。每个匿名函数都有一个对它的引用。因此,当您将鼠标悬停在每个影片剪辑上时,它们都指向同一个炸弹(循环中的最后一个)。

而不是使用匿名函数,只需添加一个如下所示的事件侦听器。事件处理程序可以依赖事件来自 a 的事实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 回答