2012-08-17 31 views
0

我以为我有它,但我仍然无法让我的movieClip播放()。我得到了它在滚动时进入“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] 

当我翻转不同的炸弹。我是否需要按名称引用炸弹?

回答

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); 
} 
+0

就是这样。谢谢,我想我已经在想这件事了。 – Denoteone 2012-08-17 06:14:12