|
|
|||||
Регистрация: Feb 2012
Сообщений: 205
|
один интервал для разных функций
Необходим код, который проигрывает анимацию в прямом или обратном порядке в зависимости от позиционирования мыши относительно середины кадра.
Пока хочу написать хотя бы для постоянного интервала в полсекунды, чтобы кадры переключались и вперёд и назад с этим интервалом. В общем-то всё работает, но висит, когда мышь перемещается по сцене. как это пофиксить? import flash.utils.setInterval; stage.addEventListener(MouseEvent.MOUSE_MOVE,аnimating); function аnimating(e:MouseEvent):void { clearInterval(intervalId) if(stage.mouseX<stage.width/2){ intervalId= setInterval (goNext,speed);} else{intervalId = setInterval(goPrev,speed);} // Update after event to ensure no lag e.updateAfterEvent(); } function goNext():void{ if (foranim.currentFrame < foranim.totalFrames) foranim.gotoAndStop(foranim.currentFrame + 1); else foranim.gotoAndStop(1); trace("going left "+foranim.currentFrame)} function goPrev():void{ if (foranim.currentFrame >1) foranim.gotoAndStop(foranim.currentFrame - 1); else foranim.gotoAndStop(foranim.totalFrames); trace("going right "+foranim.currentFrame)} var intervalId:uint var speed:int=50; Последний раз редактировалось Маруська; 04.11.2014 в 13:55. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну, сейчас у Вас интервалы просто не успевают сработать, как уже отменяются (при движении мыши).
Попробуйте использовать Timer, меняя его delay без перезапуска.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Feb 2009
Сообщений: 141
|
Добавьте условие в функцию animating, которое проверяет, изменилось ли направление и только тогда отменяйте setInterval и запускайте новый
|
|
|||||
Регистрация: Feb 2012
Сообщений: 205
|
import flash.utils.setInterval; import flash.utils.Timer; import flash.events.TimerEvent; stage.addEventListener(MouseEvent.MOUSE_MOVE,аnimating); var delay:int=0; var t:Timer = new Timer(delay); t.addEventListener(TimerEvent.TIMER, selectSide) function аnimating(e:MouseEvent):void { t.stop() t.delay=200-Math.round(150/(Math.round(stage.width/2)/Math.round(Math.abs(stage.mouseX-stage.width/2)))); t.start() e.updateAfterEvent(); } function selectSide(event:TimerEvent):void { if(stage.mouseX<stage.width/2){ goNext()} else goPrev();} // Update after event to ensure no lag function goNext():void{ trace('goNext '+ t.delay) if (foranim.currentFrame < foranim.totalFrames) foranim.gotoAndStop(foranim.currentFrame + 1); else foranim.gotoAndStop(1);} function goPrev():void{ trace('goPrev '+t.delay) if (foranim.currentFrame >1) foranim.gotoAndStop(foranim.currentFrame - 1); else foranim.gotoAndStop(foranim.totalFrames);} Добавлено через 2 часа 15 минут отказалась от mouseEvent - работает отлично - спасибо всем! Последний раз редактировалось Маруська; 05.11.2014 в 12:04. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
var w:Number = stage.stageWidth/2; var delay:int=0; var lastTime:uint = (new Date).time; stage.addEventListener(Event.ENTER_FRAME, аnimating); function аnimating(e:Event):void { delay = w - Math.round(Math.abs(stage.mouseX - w)); var m:uint = (new Date).time; if ((m - lastTime) >= delay) { lastTime = m; go(); } } function go():void { if(stage.mouseX < w) { if (foranim.currentFrame < foranim.totalFrames) foranim.gotoAndStop(foranim.currentFrame + 1); else foranim.gotoAndStop(1); } else { if (foranim.currentFrame >1) foranim.gotoAndStop(foranim.currentFrame - 1); else foranim.gotoAndStop(foranim.totalFrames); } }
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 19:26. |
|
« Предыдущая тема | Следующая тема » |
|
|