![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
на сцене есть кучка спрафтов. Каждый из них необходимо анимировать (вращать) скорость задается некой переменной внутри спрайта. и каждому я припаял функция "onAnimate", которая его поворачивает. Так вот, теперь вопрос:
Что лучше сделать: один таймер в контроллере, который будет по массиву спрайтов вызывать эту функцию, или создать каждому объекту персональный таймер с персональным обработчиком? Или может можно прилепить одному таймеру все эти обработчики?) Или как вообще делают взрослые дяди? ЗЫ во флеше 7й день. не пиннать :Р Ушел гуглить дальше. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
а не получится ли из-за этого задержки с выполнением анимации между первым и последним элементами? Возрастающей по мере увеличения массива.. оО
|
|
|||||
|
Между объектами задержек не будет, они будут работать синхронно, либо тормозить синхронно, если массив например будет очень большим. Рендеринг сцены происходит после выполнения всего кода, а не по мере его чтения.
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Правильное решение, на мой взгляд, такое:
1. Крутить всех вместе по единому таймеру (вызывать функцию в каждом из объектов) 2. Внутри каждого объекта учитывать возможные временные задержки, т.е., при вызове функции вращения поворачивать не на фиксированный угол, а на угол, пропорциональный времени, прошедшему с момента последнего вызова. Собственно, это (пункт 2) стандартное решение для флеша. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
а где-нить можно взять "стандартный для флеша" пример? Что-то мне не очень хочется косячить, ваяя собственные класы для типовых задач. Наверняка где-то есть готовый класс с анимацией по "тикам", хранением последнего вызова, усреднением кадра и проч.. и для мувиков тоже не плохо было бы увидеть
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Я думаю, в TweenLite/TweenMax эти вопросы решены.
Но применительно к рассматриваемой задаче я не вижу возможности где-то накосячить. Cейчас у Вас там что-то типа: 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; } 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(); } |
|
|||||
|
99% всех анимаций должны обновляться каждый кадр, отчего таймеру выбирают значение 1000 / stage.fps.
Если это Ваш случай, то поделитесь пожалуйста соображениями, при которых Вы используете таймер ENTER_FRAME эвенту.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
Цитата:
Кроме того, я планирую использовать этот Аниматор для проигрывания произвольных мувиков, подгружаемых на сцену по мере необходимости слегка корректируя их скорость методами gotoAndStop или как там... забыл( |
|
|||||
|
Любой DisplayObject получает событие ENTER_FRAME всё время своего существования в памяти.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|