2012-08-17 3 views
0

나는 그것을 가지고 있다고 생각했지만 여전히 내 movieClip을 재생할 수 없습니다(). 롤오버에서 "updateBomb"함수로 만드는 추적을 얻고 있지만 currentBomb는 프레임 2로 이동하지 않습니다. 왜 이런 일이 일어나고 있는거야? 내 영화 클립이 컨테이너 MC에 있기 때문에 그럴 수 있습니까? MovieClip이 롤오버를 의도 한 방식에 반응하지 않습니다.

 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

관련 문제