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

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

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

Регистрация: Aug 2013
Сообщений: 89
Уважаемый, Котейка, применяю функцию ani() для другого символа (даже другого класса), а перемещается всё тот же символ.В чём проблема?

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

Регистрация: Aug 2013
Сообщений: 56
Ну так глобальный массив один поэтому так и выходит) Сейчас погодите маленько переделаю, чтоб более универсально было.

Старый 13.08.2013, 02:47
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 3  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Цитата:
Ну это уж вы сами параметры нужные добавьте, там дело то нехитрое alpha это непрозрачность от 0 до 1
Я без Вас не справлюсь, покажите, пожалуйста, пример.

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

Регистрация: Aug 2013
Сообщений: 56
Вот теперь можно будет запускать одновременно несколько разных объектов.
Код AS3:
var coordinates:Dictionary = new Dictionary();
 
 
ani(myStar1, [{x:20,y:100},{x:40,y:200}, {x:160, y:320}], 1);
ani(myStar1, [{x:200,y:100},{x:400,y:200}, {x:16, y:320}], 1);
ani(myStar2, [{x:120,y:100},{x:25,y:200}, {x:16, y:320}], 1);
ani(myStar2, [{x:20,y:10},{x:40,y:20}, {x:160, y:32}], 1);
 
 
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);
	}
}
Для передачи доп параметров просто передавайте их вместе с x и y например
Код AS3:
{x:30, y:200, scaleX:0.5}
Разумеется только свои onComplete и onCompleteParams передать не получится их юзает ani() в своих нуждах.


Последний раз редактировалось Котейка; 13.08.2013 в 03:15.
Старый 13.08.2013, 18:25
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 5  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Котейка, Ваш код творит чудеса!
Код 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);
 
 
 
import com.greensock.*;
import com.greensock.easing.*;
 
 
 
 
 
/*for(var c:int=1;i<=19;i++){
 
 
			ani(myStar1, [{x:x1,y:y1},{x:x2,y:y2}], 1)				
 
							}*/
 //конец предыдущего положения и начало следущего положения - одни и те же y, x
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); // третье положение
Но объекты двигаются одновременно, а мне нужно по очереди: сначала двигается объект1, затем двигается объект2.Почему они двигаются одновременно, я ведь не создавал 2 потока(2 workers), команды написаны по порядку вот и должны выполнятся по порядку! В чем проблема!?! Помогите пожалуйста!

Старый 13.08.2013, 12:16
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 6  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
Если с помощью библиотеки FPTween.swc, то можно так:
Код AS3:
import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
 
var clip:FPTweenSprite = new FPTweenSprite();
clip.graphics.beginFill(0xff0000, 1);
clip.graphics.drawRect(0, 0, 100, 100);
clip.addEventListener(MouseEvent.CLICK, clickHandler);
this.addChild(clip);
clip.x = 10;
clip.y = 50;
//
var timelineTurn:FPTimelineTurn = new FPTimelineTurn(clip, 'positionTo');
timelineTurn.addTween(new Point(20, 100), Strong.easeOut, 1);
timelineTurn.addTween(new Point(40, 200), Strong.easeOut, 1);
 
function clickHandler(event:MouseEvent):void
{
	timelineTurn.start();
}
А вообще конечно вам хорошо бы научиться делать такие вещи без использования движков, используя стандартный события и таймеры.
__________________
FlashPress.ru | Blog

Старый 13.08.2013, 15:38
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 7  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Цитата:
Если с помощью библиотеки FPTween.swc, то можно так:
Скачал файл FPTween.swc, переместил в папку с проектом,нажал F9, вставил Ваш код, maincode.
Вышло куча ошибок.Что я сделал неправильно?

Добавлено через 10 минут
Цитата:
Вот теперь можно будет запускать одновременно несколько разных объектов.
Спасибо, Котейка, это то,что надо, и дополнительные параметры тоже помещаются в код!
Но вот проблема: 2 объекта двигаются одновременно, а мне нужно, чтобы сначала объект myStar1
перемещался, затем после окончания перемещения объекта myStar1, начал перемещаться объект myStar2! Что я делаю неверно, может быть я не понимаю логику ActionScript, но я же не создавал 2 потока (worker), а написал все по очереди-значит по очереди и должны выполнятся действия, а не одновременно?В чем проблема как двигать объекты по очереди?Если можно, приведите пример.

Старый 13.08.2013, 16:00
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 8  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
Цитата:
Сообщение от UserSuperPupsik Посмотреть сообщение
Скачал файл FPTween.swc, переместил в папку с проектом,нажал F9, вставил Ваш код, maincode.
Вышло куча ошибок.Что я сделал неправильно?
Не достаточно переместить swc в каталог с проектом, надо его добавить в настройках публикации:


И покажите какие ошибки выдает.
__________________
FlashPress.ru | Blog

Старый 13.08.2013, 16:28
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 9  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Всё теперь ошибок нет!.Я изменил код.
Код AS3:
import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
 
var Simbol1:FPTweenSprite = new FPTweenSprite();
Simbol1.graphics.beginFill(0xaa2345, 1);
Simbol1.graphics.drawRect(0, 0, 100, 100);
Simbol1.addEventListener(MouseEvent.CLICK, clickHandler);
this.addChild(Simbol1);
Simbol1.x = 10;
Simbol1.y = 50;
 
var timelineTurn:FPTimelineTurn = new FPTimelineTurn(Simbol1, 'positionTo');
//timelineTurn.start();
timelineTurn.addTween(new Point(20, 100), Strong.easeOut, 1);
timelineTurn.addTween(new Point(60, 50), Strong.easeOut, 1);
timelineTurn.addTween(new Point(70, 200), Strong.easeOut, 1);
timelineTurn.addTween(new Point(88, 10), Strong.easeOut, 1);
function clickHandler(event:MouseEvent):void
{
	timelineTurn.start();
}
Но двигается не мой символ simbol1 класса Simbol1, а квадрат! Как заставить двигаться мой символ, без всяких событий, по координатам (10, 20)-->(140, 50)-->(40, 120)-->(110, 20)?
А потом заставить двигаться simbol2 этого же класса (Simbol1) по координатам (40, 50)-->(240, 250)-->(90, 60)-->(110, 60)?

Старый 13.08.2013, 16:33
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 10  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
Что бы двигался ваш символ, необходимо в свойствах этого символа указать базовый класс (BaseClass) ru.flashpress.tween.display.FPTweenSprite, ну и код будет выглядеть так:
Код AS3:
import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
 
Simbol1.addEventListener(MouseEvent.CLICK, clickHandler);
 
var timelineTurn:FPTimelineTurn = new FPTimelineTurn(Simbol1, 'positionTo');
//timelineTurn.start();
timelineTurn.addTween(new Point(20, 100), Strong.easeOut, 1);
timelineTurn.addTween(new Point(60, 50), Strong.easeOut, 1);
timelineTurn.addTween(new Point(70, 200), Strong.easeOut, 1);
timelineTurn.addTween(new Point(88, 10), Strong.easeOut, 1);
function clickHandler(event:MouseEvent):void
{
	timelineTurn.start();
}
Где Simbol1 - это instance name символа который добавлен на stage

Добавлено через 2 минуты
Что бы по окончании проигрывания одного символа, начиналось проигрывание другого символа - сейчас надо слушать событие об окончании проигрывания первого, и после стартовать второй. В данный момент дописываю библиотеку FPTween так, что бы можно было совмещать проигрывание анимаций нескольких объектов
__________________
FlashPress.ru | Blog

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

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

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


 


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


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