![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Помогите разобраться, я запутался. Мне нужна очередь, в которую можно класть разные TweenLite, чтобы они выполнялись:некоторые последовательно, некоторые одновременно (пачкой, как будо это один экземпляр TweenLite в очереди, они добавляются одномоментно). После завершения анимации эти TweenLite должны удаляться из очереди.
Т.е. это очередь она одна, глобальная. А добавление экземпляров TweenLite в неё происходит на всём протяжении работы флешки. И вот, если очередь пустая - экземпляр должен сразу запускаться. Если в очереди есть ещё элементы - должен ждать. прока они все выполнятся, а потом выполняться. Я попробовал TimelineLite append() и appendMultiple() (как раз для пачек). Но там, если одна анимация уже прошла и через какое-то время добавляешь вторую - она не запускается. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Нет, мне нужна одна общая очередь. Вообще зря я про пачки написал, они уже другая история.
Сначала мне надо разобраться с одиночными элементами. Вот пример: package { import com.greensock.TimelineLite; import com.greensock.TweenLite; import flash.display.Sprite; import flash.events.Event; import flash.utils.setTimeout; /** * ... * @author Dmitry Minaev */ public class Main extends Sprite { private var _line: TimelineLite = new TimelineLite(); private var s: Sprite = new Sprite(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // рисуем точку, которую будем двигать по таймлайну s.graphics.beginFill(0); s.graphics.drawCircle(0, 0, 3); s.x = 100; s.y = 200; addChild(s); // иммитируем работу очереди // первое действие происходит сразу - точка передигается правее _line.append( new TweenLite(s, 1, { x: 130 } ) ); // второе действие происходит когда-то потом, неизвестно когда, эмулируем его задержкой setTimeout(_secondMove, 3000); } // двигаем точку левее. Вот этот код не срабатывает private function _secondMove(): void { _line.append(new TweenLite(s, 1, { x: 80 } ) ); } } } |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Да, вроде заработало, спасибо.
Добавлено через 34 минуты Всё равно работает неправильно. Если задать ощутимый промежуток, например Будет мгновенное перемещение. Это видимо как-то связано с длиной самого таймлайна. Продолжаем копать). |
|
|||||
|
Если нужно просто последовательно - я бы в конвеер Потапенко загнал.
А уж если бы потребовалось, чтобы промежутки анимаций накладывались друг на друга и как-то сложнее реагировали - тогда бы уже подключал мозг или внимательнее вчитывался в доки по твину. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Нужно последовательное воспроизведение пачек. В пачке - 1 и более твинов.
Что за конвейер Потапенко? Гугл выводит только левые ссылки, можно ссылку на библиотеку? |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Пробовал инсерт
Не работает. |
|
|||||
|
Цитата:
http://www.flasher.ru/forum/blog.php?b=528 (там внизу zip-архив) Как-то так будет выглядеть: _conveyor = new Conveyor(); // Цепочка твинов: _conveyor.add(tweenTo, [.5, { x: 130 }]); _conveyor.add(tweenTo, [.5, { x: 140 }]); _conveyor.add(tweenTo, [1.5, { x: 150 }]); _conveyor.play(); private void tweenTo(duration:Number, vars:Object) { _conveyor.stop();// Тормознули vars.onComplete = onTweenComplete; TweenLite.to(duration, vars); } private void onTweenComplete() { _conveyor.play();// Пошёл следующий твин } |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|