2012-08-17 33 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