2013-06-26 3 views
2

Я новичок во Flash ActionScript 3.0. Мне нужна функция обратного вызова на setInterval, мне понравилосьФункция обратного вызова Flash AS3 на clearInterval

Существует корзина под названием ownmouse. и он прикрепляется с помощью мыши.

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

мяч падение с верхней части документа флэш с setInterval.

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(); 

EDIT: Как я сказал 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. У вас был метод myDestroyed? – M4tchB0X3r

Смежные вопросы