|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2010
Сообщений: 8
|
Как повторить в цикле анимацию по таймеру?
Подскажите?
Есть код: var animateTimer:Timer = new Timer(10,50); var redDot:RedDot = new RedDot(); redDot.x = Math.random()*stage.stageWidth; redDot.y = Math.random()*stage.stageHeight; addChild(redDot); var slopeX = Math.random()*10-5; var slopeY = Math.random()*10-5; animateTimer.addEventListener(TimerEvent.TIMER, moveDot); function moveDot(e:TimerEvent): void { redDot.x += slopeX; redDot.y += slopeY; } animateTimer.start(); В идеале нужно, чтобы он из этой точки пробежал в том направлении например 10 раз. Последний раз редактировалось bov; 26.11.2011 в 07:49. Причина: теги |
|
|||||
Регистрация: Jan 2010
Сообщений: 8
|
Ну вот. Здесь 1 шарик 10 раз начинает бежать из случайной точки по 10 шагов в каждом забеге.
Но, я то о том, что он бегает, понимаю только из trace. Как задать время одного шага в цикле? var animateTimer:Timer = new Timer(1000,10); var redDot:RedDot = new RedDot(); addChild(redDot); animateTimer.addEventListener(TimerEvent.TIMER, moveDot); animateTimer.start(); function moveDot(e:TimerEvent): void { redDot.x = Math.random()*stage.stageWidth; redDot.y = Math.random()*stage.stageHeight; var slopeX = Math.random()*10-5; var slopeY = Math.random()*10-5; for (var i:Number=0; i<10; i++) { redDot.x += slopeX; redDot.y += slopeY; trace(animateTimer.currentCount); trace(redDot.x); } } Последний раз редактировалось bov; 26.11.2011 в 22:03. |
|
|||||
Регистрация: Jul 2011
Сообщений: 67
|
Как уже DaFive сказал, у вас один шарик, координаты которого вы десять раз изменяете в цикле.
|
|
|||||
Регистрация: Jan 2010
Сообщений: 8
|
Вопрос изначально такой:
как этот экземпляр шарика, не просто с помощью таймера сдвинуть из х1,у1 на расстояние slopeX, slopeY 10 раз с интервалом шага в 1000 миллисек (var animateTimer:Timer = new Timer(1000,10));, т.е. из начальной точки А в конечную точку В а это все повторить еще несколько раз. т.е. А-В, А-В, А-В, ..., А-В ? Добавлено через 3 часа 26 минут Вот, что хотелось: var animateTimer:Timer = new Timer(50,100); var redDot:RedDot = new RedDot(); redDot.x = Math.random()*stage.stageWidth; redDot.y = Math.random()*stage.stageHeight; var slopeX = Math.round(Math.random()*20-10); var slopeY = Math.round(Math.random()*20-10); addChild(redDot); animateTimer.addEventListener(TimerEvent.TIMER, moveDot); animateTimer.start(); function moveDot(e:TimerEvent): void { if ((animateTimer.currentCount)%10 !=0) { redDot.x += slopeX; redDot.y += slopeY; } else { trace(animateTimer.currentCount); redDot.x -= slopeX*9; redDot.y -= slopeY*9; trace(redDot.x); } } и цикл for(var i=:Number; i<10; i++) Спасибо. |
|
|||||
Регистрация: Jul 2011
Сообщений: 67
|
Хммм... что-то я не вижу в этом всём логики, но существует событие TimerEvent.TIMER_COMPLETE. Установите свой таймер на десять итераций (или сколько вам надо):
Подпишите на события, по TimerEvent.TIMER изменяйте координаты, а по TimerEvent.TIMER_COMPLETE возвращайте объект на исходную позицию, (которую следует предварительно сохранить в переменной естественно) и перезапускайте таймер: var pointA:Point=new Point(); var redDot:RedDot = new RedDot(); redDot.x = pointA.x=Math.random()*stage.stageWidth; redDot.y = pointA.y= Math.random()*stage.stageHeight; animateTimer.addEventListener(TimerEvent.TIMER, timerListener); animateTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteListener); animateTimer.start(); |
|
|||||
[+1.3 07.12.11]
Регистрация: Feb 2011
Сообщений: 121
|
Не стоит делать анимацию через циклы, т.к. на экране вы получите конечный результат, хотя трейсом увидите все итерации, т.е., если вы говорите предмету на экране двигаться до определенной точки с шагом N и все это пихаете в цикл, пытаясь отобразить положение объекта на каждом шаге, то на экране вы увидите лишь конечное положение объекта.
В общем, то что показал ProxyGreen и есть правильно. |
|
|||||
Регистрация: Jan 2010
Сообщений: 8
|
ProxyGreen: Спасибо.
Но вопрос был такой: как 10 раз вернуть объект в начальную точку, кстати, добавил reset function timerCompleteListener(e:TimerEvent):void{ redDot.x = pointA.x; redDot.y = pointA.y; animateTimer.reset(); animateTimer.start(); } вроде того var schetchik:int=0; function timerCompleteListener(e:TimerEvent):void{ if (schetchik<timerRep) { schetchik++; redDot.x = pointA.x; redDot.y = pointA.y; animateTimer.reset(); animateTimer.start(); } } imena: Спасибо Последний раз редактировалось bov; 27.11.2011 в 07:05. |
Часовой пояс GMT +4, время: 06:30. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Таймер , цикл for |
Опции темы | |
Опции просмотра | |
|
|