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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.12.2012, 15:52
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 11  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Неа, не работает. То ли в конвейере есть ошибка, то ли я его не так приспособил.
В результате написал своё, которое работает.
Ради спортивного интереса, прилагаю свой рабочий вариант и тот же самый вариант с конвейером. Можешь попробовать его оживить, мн было бы интересно посмотреть.
Там в архиве TweenQueue - вариант с конвейером, TweenQueue2 - работающиё вариант без конвейера. В Main у поля _q достаточно менять тип с TweenQueue2 на TweenQueue для смены теста.
Вложения
Тип файла: rar TweenTest.rar (446.2 Кб, 202 просмотров)

Старый 22.12.2012, 17:59
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 12  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Да не, багов то в конвеере нет.
(тесты, конечно хороши для демонстрации багов, а не их отсутствия, но загнать багу в полторы сотни строк, покрытых на 100% всё же сложно)
Есть ньюансы самой логики конвеера.
Впринципе, Ваша реализация в данном случае не сложнее применения конвеера, но, всё-таки, рабочий код:
Код AS3:
package  
{
	import com.greensock.data.TweenLiteVars;
	import com.greensock.TweenLite;
	import com.potapenko.remake.Conveyor;
	import flash.events.Event;
	/**
	 * ...
	 * @author Dima
	 */
	public class TweenQueue 
	{
		private var _conv: Conveyor = new Conveyor();
		private var _isPlaying:Boolean = false;
 
		public function TweenQueue() {
			_conv.addEventListener(Event.COMPLETE, onConvComplete);
		}
 
		private function onConvComplete(event:Event):void {
			_isPlaying = false;
		}
 
		public function add(target: Object, duration: Number, tween: Object): void {
			addMany(Vector.<Object>([target]), Vector.<Number>([duration]), Vector.<Object>([tween]));
		}
 
		public function addMany(targets: Vector.<Object>, durations: Vector.<Number>, vars: Vector.<Object>): void {
			_conv.add(startTweenSet, new TweenSet(targets, durations, vars));
			if (!_isPlaying) {
				// Вот эти вот фокусы с проверками, не дошёл ли до конца конвеер и можно ли вызвать play
				// в боевом коде у нас загнаны внуть конвеера в новую функцию launch()
				// а выставление _isPlaying = false - в конец функции play()
				// Для заранее запрограммированных действий оно не надо было, а для очереди оказалось важно
				_conv.play();
				_isPlaying = true;
			}
		}
 
		private function startTweenSet(ts:TweenSet):void {
			_conv.stop();// Начало асинхронного блока
			ts.play(resume);
		}
 
		public function resume(): void {
			_conv.play();// Конец асинхронного блока
		}
	}
}
Конвеер он больше для заранее заданного списка событий подходит, чем для очереди, хотя, вот - кода поменьше получилось.

Я так понял - задача - сделать список с плавно разъезжающимися элементами?
Так для этого не нужно очередей.
Просто при добавлении/удалении элемента каждому оставшемуся назначаем твин в точку, в которой он должен быть - 50 объектов - 50 одновременных твинов - ничего страшного.
(при этом плюём с высокой колокольни двигался ли он до этого или нет - TweenLite автоматом прерывает передыдущий твин для объекта, на который вешается следующий)
Всё!
Ну если не считать, что надо применить некоторые хитрости, чтобы одновременное движение и исчезание под этим элементом другого - не выглядело криво (например, у меня они исчезали скейлом в 0 и при уменьшении сдвигались в сторону, но можно и таки ввести ожидание конца исчезновения или ещё что)


Последний раз редактировалось expl; 22.12.2012 в 18:13.
Старый 22.12.2012, 18:46
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 13  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Ага, вот тоже думал что надо эвент на окончание конвейера как-то использовать, но уже столько перепробовал до этого, что плюнул).
Цитата:
Сообщение от expl Посмотреть сообщение
Я так понял - задача - сделать список с плавно разъезжающимися элементами?
Так для этого не нужно очередей.
Просто при добавлении/удалении элемента каждому оставшемуся назначаем твин в точку, в которой он должен быть - 50 объектов - 50 одновременных твинов - ничего страшного.
(при этом плюём с высокой колокольни двигался ли он до этого или нет - TweenLite автоматом прерывает передыдущий твин для объекта, на который вешается следующий)
Неподходит, т.к. есть ещё анимация "всплывания" элемента (которая в тесте как _insert), она отличается от анимации сдвигания элементов вместе. Первая длится две секунды и использует изменение альфы, вторая идет секунду и альфу не трогает. Прерывание первой анимации будет выглядеть некрасиво, да ещё придётся альфу проверять. Так что - только очередь, к сожалению.

Старый 10.06.2014, 19:03
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 14  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Короче, вот в чем смысл: как они переделали это - nextTween, autoPlay?
Код AS3:
 
var t2Tween:GTween = new GTween(glowFilterPoint, TIMER, {strength: MAX_STRENGTH}, {autoPlay: false, nextTween: t3Tween});
var t1Tween:GTween = new GTween(glowFilterPoint, TIMER, {strength: MIN_STRENGTH}, {nextTween: t2Tween});

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

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

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


 


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


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