2013-06-26 33 views
2

我是Flash ActionScript 3.0中的新成員。我需要setInterval的回調函數,我喜歡clearInterval上的Flash AS3回調函數

有一個叫ownmouse的籃子。並附有鼠標。

ownmouse.addEventListener(Event.ENTER_FRAME,fun); 
function fun(Eve:Event) { 
    ownmouse.startDrag(true); 
    Mouse.hide(); 
} 

球從setInterval的Flash文檔的頂部落下。

var myInterval = setInterval(fallBall,1); 
ownmouse.addEventListener(Event.ENTER_FRAME,controlCursor); 


function controlCursor(MouseMove:Event) { 
    var xaxis:int = mouseX; 
    var yaxis:int = mouseY; 
    var ballXaxis = ball.x; 
    var ballYaxis = ball.y; 

    if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) { 
    clearInterval(myInterval, function() { 
     myBall.gotoAndPlay(10) 
    }); 
    } 

    if(yaxis>620) { 
     ownmouse.stopDrag(); 
     ownmouse.y = 620; 
     Mouse.show(); 
    } else if(yaxis<420) { 
     ownmouse.stopDrag(); 
     ownmouse.y = 430; 
     Mouse.show(); 
    } 
} 

除了下面的代碼一切都工作得很好:

clearInterval(myInterval, function() { 
     myBall.gotoAndPlay(10) 
    }); 

是回調函數可能在AS3?如果沒有,如何解決這樣的問題?

非常感謝您的幫助:)

回答

0

clearInterval破壞間隔。 setInterval創建它並返回一個數字,您可以將它置於clearInterval中以銷燬它。

也setTimeout只執行一次。

您還需要在函數後面指定一個時間(以毫秒爲單位)。

我會一直推薦你使用Timer類,因爲你可以控制它並輕鬆讀取它。

+0

其實,我需要回調函數破壞間隔後。 – thebhatta

+0

因此在間隔銷燬後設置setTimeout。 – Discipol

0

clearInterval沒有回調。如果你的要求被破壞,你可以自己觸發一個方法。 根據您的需要,也許一個計時器將是一個更好的選擇。

var myTimer:Timer = new timer(1000,8);// set amout 
myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
myTimer.addEventListener(TimeEvent.TIMER_COMPLETE, timerDone); 

function timerListener (e:TimerEvent):void{ 
trace("Timer is Triggered"); 
} 
function timerDone(e:TimerEvent):void{ 
trace("Timer finishing!"); 
} 
myTimer.start(); 

編輯: 就像我說的B4,可以在滿足要求觸發您自己的方法。在你的情況與更新的源:

if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) { 
    clearInterval(myInterval); 
    intervalDestroyed(); 
    } 

function intervalDestroyed():void 
{ 
    trace("Intervall has been cleared"); 
    myBall.gotoAndPlay(10); 
} 

如果這是您正在嘗試做的,你可以調用任何你在,如果需要的唯一的事:

if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) { 
     clearInterval(myInterval); 
     myBall.gotoAndPlay(10); 
     } 
+0

非常感謝您的回答。我之前做過問題發佈:clearInterval(myInterval); myBall.gotoAndPlay(10);. clearInterval運行良好,但myBall.gotoAndPlay(10)僅在移動鼠標後才能工作,即使在clearInterval之後。所以現在你明白我的問題了。我會非常感謝你的完整解決方案。 – thebhatta

+0

您應該首先使用MOUSE_MOVE事件而不是使用enterframe。你有沒有用我的intervalDestroyed方法嘗試? – M4tchB0X3r