2012-10-02 95 views
1

我對Actionscript 3相當陌生,我有一個問題要問。 我正在做一個相當簡單的點差異遊戲,我將事件監聽器添加到for循環中的可點擊差異。我的目標是在點擊差異之後,它也會刪除它的事件監聽器。刪除循環中的事件監聽器

這裏是我的代碼:

function addDifferences() 
{ 
    for (var i = 1; i < 4; i++) 
    { 
     var difference = level1_left["level1_left_diff" + i]; 
     difference.alpha = 0; 
     difference.addEventListener(MouseEvent.CLICK, onDifferenceClick); 

     function onDifferenceClick(evt:Event):void 
     { 
      evt.currentTarget.alpha = 1; 
      evt.currentTarget.play(); 
      found++; 
      evt.currentTarget.removeEventListener(MouseEvent.CLICK, onDifferenceClick); 
     } 
    } 
} 

的問題是,我只能在訪問的最後一個元素(差)的循環,所以我只能刪除最後一個事件監聽。我希望能夠刪除每個元素的eventlisteners。

你能幫我解決嗎?謝謝!

回答

2

你應該將你的元素存儲在一個數組中,以後可以循環使用。

var differences:Array = new Array(); //Class variable, or global if you don't use classes 

function addDifferences() 
{ 
    for (var i = 1; i < 4; i++) 
    { 
     var difference = level1_left["level1_left_diff" + i]; 
     difference.alpha = 0; 
     difference.addEventListener(MouseEvent.CLICK, onDifferenceClick); 

     differences.push(difference); 
    } 
} 

//Don't create this function four time 
function onDifferenceClick(evt:Event):void 
{ 
    evt.currentTarget.alpha = 1; 
    evt.currentTarget.play(); 
    found++; 

    for (var i = 0; i < differences.length; i++) 
    { 
     differences[i].removeEventListener(MouseEvent.CLICK, onDifferenceClick); 
    } 

    //You can empty array afterwars, if you wish to start a new round (with addDifferences) 
    differences = new Array(); 
} 
+0

謝謝您的回答!這非常有幫助! – user1713984

0

您並不需要將所有項目都推送到數組中。你所需要做的就是將正確的函數傳遞給removeEventListener。在你的代碼中,每次調用removeEventListener都會獲得最後分配的內聯函數。只需創建一個非內聯函數,如:

function addDifferences() 
{ 
    for (var i = 1; i < 4; i++) 
    { 
     var difference = level1_left["level1_left_diff" + i]; 
     difference.alpha = 0; 
     difference.addEventListener(MouseEvent.CLICK, onDifferenceClick); 
    } 
} 

function onDifferenceClick(evt:Event):void 
{ 
    evt.currentTarget.alpha = 1; 
    evt.currentTarget.play(); 
    found++; //assuming this is a global variable accessible from this function!!! 
    evt.currentTarget.removeEventListener(MouseEvent.CLICK, onDifferenceClick); 
}