Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.11.2011, 21:39
bov вне форума Посмотреть профиль Отправить личное сообщение для bov Найти все сообщения от bov
  № 1  
Ответить с цитированием
bov

Регистрация: Jan 2010
Сообщений: 8
По умолчанию Как повторить в цикле анимацию по таймеру?

Подскажите?

Есть код:

Код AS3:
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();
Экземпляр шарика движется из случайной точки, в случайном направлении. 50 шагов через 10 мс.

В идеале нужно, чтобы он из этой точки пробежал в том направлении например 10 раз.


Последний раз редактировалось bov; 26.11.2011 в 07:49. Причина: теги
Старый 25.11.2011, 23:35
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 2  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Ну естественно вы в цикле одному таймеру 10 раз сказали стартовать и выполинть движение для последнего экземпляра реддот. Заведите таймер и по событию в нем циклом перебирайте созданные реддоты и двигайте куда надо.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 26.11.2011, 08:29
bov вне форума Посмотреть профиль Отправить личное сообщение для bov Найти все сообщения от bov
  № 3  
Ответить с цитированием
bov

Регистрация: Jan 2010
Сообщений: 8
Ну вот. Здесь 1 шарик 10 раз начинает бежать из случайной точки по 10 шагов в каждом забеге.

Но, я то о том, что он бегает, понимаю только из trace.

Как задать время одного шага в цикле?

Код AS3:
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.
Старый 26.11.2011, 16:44
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 4  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Как уже DaFive сказал, у вас один шарик, координаты которого вы десять раз изменяете в цикле.

Старый 26.11.2011, 18:31
bov вне форума Посмотреть профиль Отправить личное сообщение для bov Найти все сообщения от bov
  № 5  
Ответить с цитированием
bov

Регистрация: Jan 2010
Сообщений: 8
Вопрос изначально такой:
как этот экземпляр шарика, не просто с помощью таймера сдвинуть из х1,у1 на расстояние slopeX, slopeY 10 раз с интервалом шага в 1000 миллисек (var animateTimer:Timer = new Timer(1000,10));, т.е. из начальной точки А в конечную точку В

а это все повторить еще несколько раз. т.е. А-В, А-В, А-В, ..., А-В
?

Добавлено через 3 часа 26 минут
Вот, что хотелось:
Код AS3:
 
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);
	}	
}
Можно ли это сделать, как-то используя new Timer(50,10)
и цикл for(var i=:Number; i<10; i++)

Спасибо.

Старый 26.11.2011, 23:28
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 6  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Хммм... что-то я не вижу в этом всём логики, но существует событие TimerEvent.TIMER_COMPLETE. Установите свой таймер на десять итераций (или сколько вам надо):
Код AS3:
var timerRep:int=10;
var animateTimer:Timer = new Timer(1000, timerRep);
Подпишите на события, по TimerEvent.TIMER изменяйте координаты, а по TimerEvent.TIMER_COMPLETE возвращайте объект на исходную позицию, (которую следует предварительно сохранить в переменной естественно) и перезапускайте таймер:
Код AS3:
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();
Код AS3:
private function timerListener(e:TimerEvent):void{
  redDot.x += slopeX;
  redDot.y += slopeY;
}
 
private function timerCompleteListener(e:TimerEvent):void{
  redDot.x = pointA.x;
  redDot.y = pointA.y;
  animateTimer.start();
}
Цикл понадобился бы здесь для того что-бы обойти массив с несколькими такими объектами, но у вас один. Перемещение имхо луче определять в полярном виде, а потом уже вычислять сдвиги по декартовым координатам.

Старый 27.11.2011, 00:22
imena вне форума Посмотреть профиль Отправить личное сообщение для imena Найти все сообщения от imena
  № 7  
Ответить с цитированием
imena
[+1.3 07.12.11]

Регистрация: Feb 2011
Сообщений: 121
Не стоит делать анимацию через циклы, т.к. на экране вы получите конечный результат, хотя трейсом увидите все итерации, т.е., если вы говорите предмету на экране двигаться до определенной точки с шагом N и все это пихаете в цикл, пытаясь отобразить положение объекта на каждом шаге, то на экране вы увидите лишь конечное положение объекта.

В общем, то что показал ProxyGreen и есть правильно.

Старый 27.11.2011, 06:53
bov вне форума Посмотреть профиль Отправить личное сообщение для bov Найти все сообщения от bov
  № 8  
Ответить с цитированием
bov

Регистрация: Jan 2010
Сообщений: 8
ProxyGreen: Спасибо.

Но вопрос был такой: как 10 раз вернуть объект в начальную точку, кстати, добавил reset
Код AS3:
function timerCompleteListener(e:TimerEvent):void{
  redDot.x = pointA.x;
  redDot.y = pointA.y;
  animateTimer.reset();
  animateTimer.start();
}
Вот, чтобы 10 раз запустить timerCompleteListener, можно ли использовать цикл for.? Как я понимаю этого сделать нельзя? Поэтому только через проверку условия (какой-нибудь еще переменной<timerRep)?
вроде того
Код AS3:
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();
	}
}
Добавлено через 35 секунд

imena: Спасибо


Последний раз редактировалось bov; 27.11.2011 в 07:05.
Создать новую тему Ответ Часовой пояс GMT +4, время: 06:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Таймер , цикл for
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.