2014-02-06 77 views
0

嘿傢伙我在我的AS3文件中遇到事件監聽器問題。我試圖讓每個父(83幀)影片剪輯重置時,持續83幀的此對象出現在不同的位置。問題是我有一個函數,將對象放置在一個隨機的y值上,這個效果很好。當它重置時,ojbect出現在相同的Y點上。這是因爲我removeEventListener函數,否則對象在加載時會從屏幕上射出。我如何再次調用該事件偵聽器而不會導致將對象從屏幕上彈出的循環?EventListener AS3問題重置問題

這裏是我的代碼:

import flash.events.Event; 
stop(); 
addEventListener(Event.ENTER_FRAME, SeaWeedPostion); 
//stage.addEventListener(Event.ADDED_TO_STAGE, SeaWeedPostion); 



function SeaWeedPostion(e:Event):void{ 
// if(newSeaWeed == 1) { 
var randUint:uint = uint(Math.random() *500 + 50); 
this.seaweedSet.y += randUint; 
trace(randUint); 

stopPos(); 
//}else{ 
    //nothing 
// } 
} 

function stopPos():void{ 
removeEventListener(Event.ENTER_FRAME, SeaWeedPostion); 
//var newSeaWeed = 0; 
} 

function resetSeaWeed():void{ 
addEventListener(Event.ENTER_FRAME, SeaWeedPostion); 
} 

我有一些//代碼在那裏從嘗試不同的東西。 任何人有任何建議?

謝謝!

回答

0

ENTER_FRAME事件觸發每一幀,所以不是改變每個幀的位置,可能最好創建一個計數器,計數幀,如果它達到82 SeaWeed的位置改變。

var counter:uint = 0; 

現在添加ENTER_FRAME聽衆

addEventListener(Event.ENTER_FRAME, onEnterFrame); 

function SeaWeedPostion(e:Event):void { 
    counter++; 

    //Are we there yet? 
    if(counter < 83) { 
     //Nope, carry on 
    } 
    else { 
     //Yey! 
     changePosition(); 
     counter = 0; 
    } 
} 

//Reset SeaWeed position when called 
function changePosition() { 
    var randUint:uint = uint(Math.random() *500 + 50); 
    this.seaweedSet.y += randUint; 
    trace(randUint); 
}