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

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

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

Регистрация: Aug 2013
Сообщений: 89
По умолчанию Избавление от многопоточности.(TweenLite)

Здравствуйте.Дан код, который двигает 3 объекта.myStar1, simbol1, simbol2.Этот код написал пользователь Котейка.Я его лишь изменил его немного.

Код AS3:
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=50;
myStar1.y=50;
addChild(myStar1);
 
var simbol1:Simbol1;//simbol1 - название класса символа
simbol1=new Simbol1();
simbol1.x=50;
simbol1.y=50;
addChild(simbol1);
 
 
var simbol2:Simbol1;//simbol1 - название класса символа
simbol2=new Simbol1();
simbol2.x=50;
simbol2.y=50;
addChild(simbol2);
 
 
import com.greensock.*;
import com.greensock.easing.*;
 
var coordinates:Dictionary = new Dictionary();
 
 
function ani(object:DisplayObject, coords:Array, speedt:int = 1):void 
{
	if (coords) 
	{
		if (!coordinates[object])
		{
			coordinates[object] = coords;
		}
		else 
		{
			coordinates[object] = coordinates[object].concat(coords);
			return;
		}
	}
	if (coordinates[object])
	{
		var nextCoords:Object = coordinates[object].shift();
		nextCoords.onComplete = ani;
		nextCoords.onCompleteParams = [object, null, speedt];
		if (!coordinates[object].length) delete coordinates[object];
		TweenLite.to(object, speedt, nextCoords);
	}
}
ani(myStar1, [{scaleX:1,scaleY:1,rotation:0,x:50,y:50},{ease:Elastic.easeIn,rotation:0,scaleX:1,scaleY:1,x:30,y:60}], 1); // первое положение
 ani(myStar1, [{x:30,y:60},{rotation:0,x:110,y:175}],2); //второе положение
 ani(myStar1, [{x:110,y:175},{x:140,y:135}],100); // третье положение
 
ani(simbol1, [{ease:Elastic.easeIn,x:50,y:1},{ease:Elastic.easeIn,x:120,y:70}], 1); // первое положение
 ani(simbol1, [{ease:Elastic.easeIn,x:120,y:70},{ease:Elastic.easeIn,x:160,y:135}],2); //второе положение
 ani(simbol1,[{ease:Elastic.easeIn,x:160,y:135},{ease:Elastic.easeIn,x:240,y:235}],1); // третье положение
 
ani(simbol2, [{ease:Elastic.easeIn,x:10,y:11},{ease:Elastic.easeIn,x:20,y:170}], 1); // первое положение
 ani(simbol2, [{ease:Elastic.easeIn,x:20,y:170},{ease:Elastic.easeIn,x:140,y:30}],2); //второе положение
 ani(simbol2,[{ease:Elastic.easeIn,x:140,y:30},{ease:Elastic.easeIn,x:440,y:435}],1); // третье положение

Функция ani двигает объекты, но начинает двигать их одновременно, будто работают 3 потока(3 workers) .
А мне надо чтобы чтобы сначала двигался объект myStar, затем simbol1, и затем simbol1 и все по очереди.
Как избавиться от многопоточности, заставить выполнятся код по очереди?Заранее спасибо!

Старый 13.08.2013, 22:12
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
У TweenLite есть события. Подходящее - onComplete. С его помощью можно по завершению одного твина запускать следующий. По ссылке посмотрите примеры использования.
Обратите также внимание на параметр onCompleteParams, возможно что-то придется передавать в обработчик onComplete с его помощью.
__________________
Идите первым!

Старый 13.08.2013, 22:23
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 3  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
будто работают 3 потока(3 workers)
это категорически не так, поток в данном случае один и он просто двигает все объекты. Просто двигайте один, потом слушайте событие завершения и запускайте второй.
__________________
:)

Старый 14.08.2013, 05:50
Котейка вне форума Посмотреть профиль Отправить личное сообщение для Котейка Найти все сообщения от Котейка
  № 4  
Ответить с цитированием
Котейка
 
Аватар для Котейка

Регистрация: Aug 2013
Сообщений: 56
UserSuperPupsik, ну так я же думал, что вам именно такое поведение и нужно, чтобы разные объекты не зависели друг от друга. Кто ж мог подумать, что вам нужен один стек анимации на всех. Ну вот как-то так будет:
Код AS3:
var aniParameters:Array = new Array();
function ani(object:DisplayObject, parameters:Array, time:Number = 1):void
{
	if(object && parameters){
		for each(var item:Object in parameters) {
			item.object = object;
			if(!item.t) item.t = time;
		}
		if(!aniParameters.length) aniParameters = parameters;
		else {
			aniParameters = aniParameters.concat(parameters);
			return;
		}
	}
	if(aniParameters.length){
		var nextParameters:Object = aniParameters.shift();
		var nextObject:DisplayObject = nextParameters.object;
		var nextTime:Number = nextParameters.t;
		delete nextParameters.object;
		delete nextParameters.t;
		if(aniParameters.length) {
			nextParameters.onComplete = arguments.callee;
			nextParameters.onCompleteParams = [null, null];
		}
		TweenLite.to(nextObject, nextTime, nextParameters);
	}
}
 
/**
 * Ну и соббсна пример
 * Обратите внимание, что к прочим параметрам анимации (x,y,ease и т.д.) я добавил еще один необязательный - t
 * Это время анимации в секундах, как и последняя переменная, принимаемая функцией.
 * То есть те шаги, у которых t не указан как и раньше будут брать время общее для всех шагов,
 * а у которых указан будет свое индивидуальное)
 */
ani(simbol1, [{x:500, y:10, t:2},{x:500, y:350},{x:30,y:350, ease:Elastic.easeIn}], 3);
 
ani(simbol2, [{x:400,y:400, t:2},{x:20, y:17}]);
ani(simbol2, [{x:400,y:17, t:2},{x:14,y:300, t:3}]);


Последний раз редактировалось Котейка; 14.08.2013 в 07:11.
Старый 14.08.2013, 10:04
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 5  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Да вы,я смотрю, крутой, Котейка!!! .Вот теперь то, что надо!!!Большое спасибо!!!Попробую написать инструкцию для того, чтобы заставить двигаться картинки по очереди в adobe flash cs5.
1. Создайте картинку 1.
2. Преобразуйте её в символ с параметрами: имя: myStar, имя класса: MyStar.(Поставьте галочку
"экспорт для ActionSript")
3. Создайте картинку 2
4. Преобразуйте её в символ с параметрами: имя: simbol1, имя класса: Simbol1.(Поставьте галочку "экспорт для ActionSript")
5.Создайте картинку 3.
6. Преобразуйте её в символ с параметрами: имя: simbol2, имя класса: Simbol2.(Поставьте галочку "экспорт для ActionSript")
7.Создайте папку project1 в любом месте.
8.Нажмите Файл->Сохранить как.Задайте имя файла project1, тип файла: .fla.Сохраните файл в папке
project1(в той, которую вы создали)
9.Нажмите Файл->Cоздать->Прект Flash.Нажмите на меню.Выберите Создать проект.
Задайте имя проекта: project1. Задайте корневую папку(ту, которую вы создали)(смотреть пункт 7)
10.Скачайте TweenLite отсюда http://www.greensock.com/tweenlite/
11.Переместите папку com из скаченого файла в папку project1.
12.Закройте adobe flash cs5. Откройте adobe flash cs5.
13.Нажмите Файл->Открыть->Откройте файл project1.fla.
14.Нажмите F9 .Выбирите Слой 1: Кадр 1
15.Вставьте код, который написал Котейка, и нажмите ctrl+enter:
Код AS3:
//Код Котейки:
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=50;
myStar1.y=50;
addChild(myStar1);
 
var simbol1:Simbol1;//Simbol1 - название класса символа
simbol1=new Simbol1();
simbol1.x=50;
simbol1.y=50;
addChild(simbol1);
 
 
var simbol2:Simbol2;//Simbol2 - название класса символа
simbol2=new Simbol2();
simbol2.x=100;
simbol2.y=100;
addChild(simbol2);
 
 
import com.greensock.*;
import com.greensock.easing.*;
 
 
 
 
 
 
var aniParameters:Array = new Array();
function ani(object:DisplayObject, parameters:Array, time:Number = 1):void
{
	if(object && parameters){
		for each(var item:Object in parameters) {
			item.object = object;
			if(!item.t) item.t = time;
		}
		if(!aniParameters.length) aniParameters = parameters;
		else {
			aniParameters = aniParameters.concat(parameters);
			return;
		}
	}
	if(aniParameters.length){
		var nextParameters:Object = aniParameters.shift();
		var nextObject:DisplayObject = nextParameters.object;
		var nextTime:Number = nextParameters.t;
		delete nextParameters.object;
		delete nextParameters.t;
		if(aniParameters.length) {
			nextParameters.onComplete = arguments.callee;
			nextParameters.onCompleteParams = [null, null];
		}
		TweenLite.to(nextObject, nextTime, nextParameters);
	}
}
 
/**
 * Ну и соббсна пример
 * Обратите внимание, что к прочим параметрам анимации (x,y,ease и т.д.) я добавил еще один необязательный - t
 * Это время анимации в секундах, как и последняя переменная, принимаемая функцией.
 * То есть те шаги, у которых t не указан как и раньше будут брать время общее для всех шагов,
 * а у которых указан будет свое индивидуальное)
 */
ani(simbol1, [{x:50, y:50, t:2},{x:200, y:350},{x:350,y:350, ease:Elastic.easeIn},{x:200,y:150}], 2);
 
ani(myStar1, [{x:400,y:400, t:2},{x:20, y:17}]);
ani(simbol2, [{x:100,y:100, t:2},{x:14,y:300, t:3},{y:243,x:155}]);

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

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

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


 


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


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