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

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

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

Регистрация: Feb 2012
Сообщений: 1,540
Я вот не понимаю, чем вам так нравится tweenlite/max. Код ужасен. Лицензия очень ограничивает.
Тем более actuate кросс-платформенный.

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

Регистрация: Aug 2013
Сообщений: 56
Цитата:
Как, используя TweenLite, переместить картинку из (10, 50) в (20, 100), а затем в (40, 200)?
Код AS3:
 
ani(myStar1, [{x:20,y:100},{x:40,y:200}], 1);
 
function ani(object:DisplayObject, coords:Array, speedt:int = 1):void 
{
	if (coords.length) 
	{
		var nextCoords:Object = coords.shift();
		TweenLite.to(object, speedt, { x:nextCoords.x, y:nextCoords.y, onComplete:ani, onCompleteParams:[object, coords, speedt] } );
	}
}
А вообще советую вам основательно подучить AS. Перемещение объекта это же самые азы.

Старый 12.08.2013, 22:12
UserSuperPupsik вне форума Посмотреть профиль Отправить личное сообщение для UserSuperPupsik Найти все сообщения от UserSuperPupsik
  № 13  
Ответить с цитированием
UserSuperPupsik

Регистрация: Aug 2013
Сообщений: 89
Я скачал файл greensock-v12-as3.zip вот отсюда http://www.greensock.com/tweenlite/.
Создал Проект Flash.Создал в папке проэкта ActionScript 3.0 файл.
Переместил папку com из архива greensock-v12-as3.zip в папку с проектом и удалил папки других Tween'ов.
Нарисовал фигуру, преобразовал ее в символ myStar ,создав класс MyStar.
Почитал http://www.greensock.com/tweenlite/ Вот что получилось:

Код AS3:
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=20;
myStar1.y=30;
addChild(myStar1);
 
import com.greensock.*;
 
TweenLite.from(myStar1, 3, {x:20, y:30});
TweenLite.to(myStar1, 3, {x:100, y:100});
 
TweenLite.from(myStar1, 3, {x:100, y:100});
TweenLite.to(myStar1, 3, {x:100, y:200});
Я хочу, чтобы картинка перемещалась из (20, 30) в (100, 100), а затем в (100, 200).Но она перемещается
только из (100, 100) в (100, 200).
Как используя TweenLite сделать это:
Цитата:
Я хочу, чтобы картинка перемещалась из (20, 30) в (100, 100), а затем в (100, 200).
Добавлено через 18 минут
Уважаемый, Котейка, уточню задачу:
Как, используя TweenLite, переместить картинку
сначала из (10, 20) в (20, 40),
затем из (20, 40) в (40, 80),
затем из (40, 80) в (80, 160),
затем из (80, 160) в (160 320),
и так далее (сколько угодно перемещений, можете сами продолжить ряд если хотите ).
Заранее спасибо!

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

Регистрация: Aug 2013
Сообщений: 56
UserSuperPupsik, ну я ж вам привел код который именно это и делает
повторюсь, добавив ваш код добавления на сцену
Код AS3:
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=20;
myStar1.y=30;
addChild(myStar1);
/* Запуск перемещения */
ani(myStar1, [{x:20,y:100},{x:40,y:200}, {x:160, y:320}], 1);
 
 
function ani(object:DisplayObject, coords:Array, speedt:int = 1):void 
{
	if (coords.length) 
	{
		var nextCoords:Object = coords.shift();
		TweenLite.to(object, speedt, { x:nextCoords.x, y:nextCoords.y, onComplete:ani, onCompleteParams:[object, coords, speedt] } );
	}
}
Поясню. функцию ani передаем в параметр onComplete (это коллбек - функция которая вызовется по завершении анимации). Т.е. делаем что-то похожее на рекурсию, работающую пока не кончится массив координат, которые должен посетить объект.

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

Регистрация: Aug 2013
Сообщений: 89
Спасибо ,Вам, Котейка!
Я сам бы не догадался что вместо {x:20,y:100},{x:40,y:200}, можно добавить много
{x:20,y:100},{x:40,y:200},{x:35,y:100},{x:40,y:150}.
Код хороший!
Ну а если я захочу перемещать картинку в цикле с изменением координат x=x+45 y=y+15, то я не смогу
использовать эту функцию?

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

Регистрация: Aug 2013
Сообщений: 56
UserSuperPupsik, не совсем понял. Покажите на примере.
Если вы имеете ввиду массив координат в цикле задавать. То сможете, почему нет, ну например
Код AS3:
var array:Array = new Array();
for (var i:int = 0; i < 10; i++) 
{
	array[i] = { x:i * 10, y:i * 20 };
}
ani(myStar1, array, 1);

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

Регистрация: Aug 2013
Сообщений: 89
Ну хорошо,Котейка, здесь есть 2 проблемы:
1) А если я хочу подождать 4 секунды, а затем снова вызвать
ani(myStar1, [{x:20,y:100},{x:40,y:200}, {x:160, y:320}], 1);
Затем подождать 5 сек, и затем вызвать
ani(myStar1, [{x:160,y:320},{x:40,y:200}, {x:160, y:320}], 1);

2) Я бы хотел что-то типа
Код AS3:
var x1:int=0
var y1:int=0
for (var i:int = 0; i < 10; i++) 
{
	ani(myStar1, {x:x1,y:y1}, 1);
             x1=x1+20
             y1=y1+10
 
 
}
Всё, что мне нужно, так это в любом моменте выполнения кода переместить картинку!!!Уже потратил много дней на решение этой проблемы!!!

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

Регистрация: Aug 2013
Сообщений: 56
Я вроде понял что вы хотите сделать. Чтобы при добавлении новых координат старые не сбивались, а новые добавлялись в конец списка, так? Для этого просто надо сделать массив координат глобальным. Ну а функцию ani модифицируем чуть чуть
Код AS3:
var coordinates:Array = new Array();
 
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=20;
myStar1.y=30;
addChild(myStar1);
/* Запуск перемещения */
ani(myStar1, [{x:20,y:100},{x:40,y:200}, {x:160, y:320}], 1);
/*Добавляем новые в любой момент*/
ani(myStar1, [{x:90,y:100},{x:10,y:200}, {x:140, y:360}], 1);
 
 
function ani(object:DisplayObject, coords:Array, speedt:int = 1):void 
{
	if (coords) 
	{
		coordinates = coordinates.concat(coords);
		if (coordinates.length > coords.length) return;
	}
	if (coordinates.length) 
	{
		var nextCoords:Object = coordinates.shift();
		TweenLite.to(object, speedt, { x:nextCoords.x, y:nextCoords.y, onComplete:ani, onCompleteParams:[object, null, speedt] } );
	}
}

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

Регистрация: Aug 2013
Сообщений: 89
Котейка, Вы поняли, что я хотел!
Вот что получилось:

Код AS3:
var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=50;
myStar1.y=50;
addChild(myStar1);
 
import com.greensock.*;
var coordinates:Array = new Array();
 
 ani(myStar1, [{x:50,y:50},{x:120,y:70}], 1); // первое положение
 ani(myStar1, [{x:120,y:70},{x:160,y:135}],2); //второе положение
 ani(myStar1, [{x:160,y:135},{x:240,y:235}],100); // третье положение
 //конец предыдущего положения и начало следущего положения - одни и те же y, x
function ani(object:DisplayObject, coords:Array, speedt:int = 1):void 
{
	if (coords) 
	{
		coordinates = coordinates.concat(coords);
		if (coordinates.length > coords.length) return;
	}
	if (coordinates.length) 
	{
		var nextCoords:Object = coordinates.shift();
		TweenLite.to(object, speedt, { x:nextCoords.x, y:nextCoords.y, onComplete:ani, onCompleteParams:[object, null, speedt] } );
	}
}
Добавлено через 7 минут
Было бы неплохо, если Вы, Котейка, добавили к функции ani() все параметры, в том числе и duration, ease,
scale, rotation, tint, alpha(Кстати,что такое alpha), как на примере ниже.
TweenLite.to(myStar1, 1, {x:65, y:117, scaleX:1, scaleY:1, rotation:0, alpha:1, tint:null, ease:Elastic.easeInOut});
Было бы совсем хорошо...

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

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

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

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

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


 


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


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