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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.01.2011, 14:13
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 1  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
По умолчанию timer для анимации

на сцене есть кучка спрафтов. Каждый из них необходимо анимировать (вращать) скорость задается некой переменной внутри спрайта. и каждому я припаял функция "onAnimate", которая его поворачивает. Так вот, теперь вопрос:

Что лучше сделать: один таймер в контроллере, который будет по массиву спрайтов вызывать эту функцию, или создать каждому объекту персональный таймер с персональным обработчиком? Или может можно прилепить одному таймеру все эти обработчики?) Или как вообще делают взрослые дяди?

ЗЫ во флеше 7й день. не пиннать :Р Ушел гуглить дальше.

Старый 07.01.2011, 14:25
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Я думаю первый вариант лучше всего.
Цитата:
один таймер в контроллере, который будет по массиву спрайтов вызывать эту функцию

Старый 07.01.2011, 15:37
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 3  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
а не получится ли из-за этого задержки с выполнением анимации между первым и последним элементами? Возрастающей по мере увеличения массива.. оО

Старый 07.01.2011, 15:59
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Между объектами задержек не будет, они будут работать синхронно, либо тормозить синхронно, если массив например будет очень большим. Рендеринг сцены происходит после выполнения всего кода, а не по мере его чтения.

Старый 07.01.2011, 19:41
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Правильное решение, на мой взгляд, такое:
1. Крутить всех вместе по единому таймеру (вызывать функцию в каждом из объектов)
2. Внутри каждого объекта учитывать возможные временные задержки, т.е., при вызове функции вращения поворачивать не на фиксированный угол, а на угол, пропорциональный времени, прошедшему с момента последнего вызова.

Собственно, это (пункт 2) стандартное решение для флеша.

Старый 07.01.2011, 19:55
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 6  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
а где-нить можно взять "стандартный для флеша" пример? Что-то мне не очень хочется косячить, ваяя собственные класы для типовых задач. Наверняка где-то есть готовый класс с анимацией по "тикам", хранением последнего вызова, усреднением кадра и проч.. и для мувиков тоже не плохо было бы увидеть

Старый 07.01.2011, 20:54
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 7  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Я думаю, в TweenLite/TweenMax эти вопросы решены.

Но применительно к рассматриваемой задаче я не вижу возможности где-то накосячить. Cейчас у Вас там что-то типа:

Код AS3:
private var dRotation:Number = 10;
private var timerInterval:int = 200;
private var timer:Timer = new Timer(timerInterval);
 
private function init() : void
{
   timer.addEventListener(TimerEvent.TIMER,onTimer);
   timer.start();
}
 
private function onTimer(e:Event) : void
{
   // mcArray - массив вращаемых объектов
   for(var i:int=0;i<mcArray.length;i++) mcArray[i].rotation += dRotation;
}
а после ввода коррекции будет примерно так:


Код AS3:
private var dRotation:Number = 10;
private var timerInterval:int = 200;
private var timer:Timer = new Timer(timerInterval);
private var currentTimer:int;
 
private function init() : void
{
   timer.addEventListener(TimerEvent.TIMER,onTimer);
   currentTimer = getTimer();
   timer.start();
}
 
private function onTimer(e:Event) : void
{
   var dRotationCorrected:Number = dRotation * (getTimer()-currentTimer) / timerInterval;
 
   // mcArray - массив вращаемых объектов
   for(var i:int=0;i<mcArray.length;i++) mcArray[i].rotation += dRotationCorrected;
 
   currentTimer = getTimer();
}
Как-то так.

Старый 07.01.2011, 21:24
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
99% всех анимаций должны обновляться каждый кадр, отчего таймеру выбирают значение 1000 / stage.fps.

Если это Ваш случай, то поделитесь пожалуйста соображениями, при которых Вы используете таймер ENTER_FRAME эвенту.

Старый 07.01.2011, 22:32
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 9  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
Цитата:
99% всех анимаций должны обновляться каждый кадр
У меня после 7 дней изучения флеша остались сомнения по поводу вызова события ENTER_FRAME для шейпа, который сейчас скрыт за пределами сцены, но это не значит что он должен прекратить вращаться... это будет несколько неестественно.
Кроме того, я планирую использовать этот Аниматор для проигрывания произвольных мувиков, подгружаемых на сцену по мере необходимости слегка корректируя их скорость методами gotoAndStop или как там... забыл(

Старый 07.01.2011, 23:38
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 10  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Любой DisplayObject получает событие ENTER_FRAME всё время своего существования в памяти.

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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