Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перемещение картинки с помощью изменения ее координат (http://www.flasher.ru/forum/showthread.php?t=202793)

UserSuperPupsik 11.08.2013 02:52

Перемещение картинки с помощью изменения ее координат
 
Здравствуйте.Дан код.

Код AS3:

var myStar1:MyStar;
myStar1=new MyStar();
addChild(myStar1)
myStar1.x=10
myStar1.y=10

Результат кода - вывод картинки на экран.
Я хочу, чтобы картинка плавно перемещалась согласно координатам напрмер из места x=10 y=10 в место x=20 y=20 , а затем в x=30 y=30.Или хотябы я успевал увидеть как она меняет своё положение :)Как будет выглядеть код такого перемещения картинки?

KumoKairo 11.08.2013 10:02

Покажите, что вы уже пробовали сделать для достижения результата и на чем возникла загвоздка.

MikroAcse 11.08.2013 11:42

Для этого есть твины.
Вот хорошие:
1. Actuate
2. Eaze Tween
3. GTween

UserSuperPupsik 11.08.2013 11:47

Вложений: 1
Я прбовал так
var myStar1:MyStar;
myStar1=new MyStar();
addChild(myStar1)
myStar1.x=10
myStar1.y=10
//здесь нужна остановка выполнения кода на 2 сек, затем

myStar1.x=20
myStar1.y=20
//здесь нужна остановка выполнения кода на 4 сек, затем

myStar1.x=30
myStar1.y=30

Я хочу чтобы картинка перемещалась по полю и я успевал увидеть её, поэтому нужны остановки!

Mkey 11.08.2013 12:53

Код AS1/AS2:

function move(e:Event){
MovieClip.x+=1;
MovieClip.y+=1;
}
MovieClip.addEventListener(Event.ENTER_FRAME, move);

Почитай о событиях во Флэш. Поможет

UserSuperPupsik 12.08.2013 01:41

Спасибо,MikroAcse.
Нашел только Tween.
Такой код работает верно!

Код AS3:

var myStar1:MyStar;//MyStar - название класса символа
myStar1=new MyStar();
myStar1.x=20;
myStar1.y=30;
addChild(myStar1);
 
 
import fl.transitions.Tween;
import fl.transitions.easing.*;
 
var myTween1:Tween = new Tween(myStar1, "y",Strong.easeOut, 30, 100,0.5, true);
var myTween2:Tween = new Tween(myStar1,"x", Strong.easeOut, 20, 300, 0.5, true);

Картинка myStar1 перемещается из (30, 20) в (100, 200).Но теперь я хочу чтобы из (100, 200) переместилась в (300, 300) а потом в (400, 400).Как будет выглядеть код?Заранее спасибо.

MikroAcse 12.08.2013 09:52

Да, ты нашел Tween.
Но этот твиннер является одним из самых плохих.
Чтобы воспользоваться Actuate/Eaze, нужно их скачать и положить в папку с проектом.
Но если ты все таки дальше будешь использовать стандартный Tween, то прочитай в справке про события.

UserSuperPupsik 12.08.2013 18:19

Спасибо,MikroAcse.
Я скачал Actuate, GTween, Tweener переместил их папки в папку с проектом.
Искал примеры, но ничего не нашел про то,
как переместить картинку из (10, 50) в (20, 100) ,а затем в (40, 200).
На этом форуме тоже ничего про это нет!
Как используя Actuate переместить картинку из (10, 50) в (20, 100), а затем в (40, 200)?
Как используя GTween переместить картинку из (10, 50) в (20, 100), а затем в (40, 200)?
Как используя Tweener переместить картинку из (10, 50) в (20, 100), а затем в (40, 200)?
Пожалуйста, с примерами.

Aquahawk 12.08.2013 18:38

Цитата:

Actuate, GTween, Tweener переместил их папки в папку с проектом.
вот так не надо делать. Используй один какой нибудь. Я вообще рекомендую TweenLite

UserSuperPupsik 12.08.2013 19:07

Спасибо, Aquahawk!
Я скачал файл greensock-v12-as3.zip вот отсюда http://www.greensock.com/tweenlite/, переместил папку из архива в папку с проектом и удалил папки других Tween'ов.
Меня теперь интересует ответ на вопрос:
Как, используя TweenLite, переместить картинку из (10, 50) в (20, 100), а затем в (40, 200)?
Пожалуйста, с примерами.

MikroAcse 12.08.2013 19:40

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

Котейка 12.08.2013 20:09

Цитата:

Как, используя 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. Перемещение объекта это же самые азы.

UserSuperPupsik 12.08.2013 22:12

Я скачал файл 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

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 (это коллбек - функция которая вызовется по завершении анимации). Т.е. делаем что-то похожее на рекурсию, работающую пока не кончится массив координат, которые должен посетить объект.

UserSuperPupsik 12.08.2013 23:42

Спасибо ,Вам, Котейка!
Я сам бы не догадался что вместо {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

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);


UserSuperPupsik 13.08.2013 00:43

Ну хорошо,Котейка, здесь есть 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

Я вроде понял что вы хотите сделать. Чтобы при добавлении новых координат старые не сбивались, а новые добавлялись в конец списка, так? Для этого просто надо сделать массив координат глобальным. Ну а функцию 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] } );
        }
}


UserSuperPupsik 13.08.2013 02:07

Котейка, Вы поняли, что я хотел!
Вот что получилось:

Код 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

Ну это уж вы сами параметры нужные добавьте, там дело то нехитрое :) alpha это непрозрачность от 0 до 1

UserSuperPupsik 13.08.2013 02:35

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

Котейка 13.08.2013 02:39

Ну так глобальный массив один поэтому так и выходит) Сейчас погодите маленько переделаю, чтоб более универсально было.

UserSuperPupsik 13.08.2013 02:47

Цитата:

Ну это уж вы сами параметры нужные добавьте, там дело то нехитрое alpha это непрозрачность от 0 до 1
Я без Вас не справлюсь, покажите, пожалуйста, пример.

Котейка 13.08.2013 02:58

Вот теперь можно будет запускать одновременно несколько разных объектов.
Код 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() в своих нуждах.

maincode 13.08.2013 12:16

Если с помощью библиотеки 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();
}

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

UserSuperPupsik 13.08.2013 15:38

Цитата:

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

Добавлено через 10 минут
Цитата:

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

maincode 13.08.2013 16:00

Цитата:

Сообщение от UserSuperPupsik (Сообщение 1143657)
Скачал файл FPTween.swc, переместил в папку с проектом,нажал F9, вставил Ваш код, maincode.
Вышло куча ошибок.Что я сделал неправильно?

Не достаточно переместить swc в каталог с проектом, надо его добавить в настройках публикации:
http://flashpress.ru/blog/wp-content...dSwcFlash2.png

И покажите какие ошибки выдает.

UserSuperPupsik 13.08.2013 16:28

Всё теперь ошибок нет!.Я изменил код.
Код 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)?

maincode 13.08.2013 16:33

Что бы двигался ваш символ, необходимо в свойствах этого символа указать базовый класс (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 так, что бы можно было совмещать проигрывание анимаций нескольких объектов

UserSuperPupsik 13.08.2013 17:09

Вложений: 2
Сделал как вы сказали: вставил ru.flashpress.tween.display.FPTweenSprite в базовый класс.
Выполнил этот код:
Код AS3:

import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
 
var simbol1:Simbol1;//Simbol1 - название класса символа
simbol1=new Simbol1();
simbol1.x=20;
simbol1.y=30;
addChild(simbol1);
 
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();
}

Но получил ошибку:

UserSuperPupsik 13.08.2013 17:10

Что я сделал неправильно?

Добавлено через 14 минут
Котейка нужна ваша помощь:
Цитата:

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

maincode 13.08.2013 17:34

в этой стройке
Код AS3:

Simbol1.addEventListener(MouseEvent.CLICK, clickHandler);

вы обращаетесь к классу, а надо к экземпляру, т.е. надо писать так
Код AS3:

simbol1.addEventListener(MouseEvent.CLICK, clickHandler);


UserSuperPupsik 13.08.2013 18:16

maincode, я сделал это, вот получил такие ошибки:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at ru.flashpress.tween.timeline.turn::FPTimelineTurn/addTween()
at project3_fla::MainTimeline/frame1()
RangeError: Error #1125: Индекс 0 выходит за границы диапазона 0.
at ru.flashpress.tween.timeline.turn::FPTimelineTurn/playCurrent()
at ru.flashpress.tween.timeline.turn::FPTimelineTurn/playNow()
at ru.flashpress.tween.timeline.turn::FPTimelineTurn/start()
at project3_fla::MainTimeline/clickHandler()
Мне всего лишь нужно без событий на мышь, просто перемещения (10,10)-->(20,20)-->(30,30)-->(10,10).
Как это сделать с помощью FPTween?

maincode 13.08.2013 18:19

можете приложить исходник fla ?

Добавлено через 1 минуту
а не заметил с первого раза, вот здесь тоже
Код AS3:

var timelineTurn:FPTimelineTurn = new FPTimelineTurn(Simbol1, 'positionTo');

надо писать с маленькой буквы Simbol1.

Я же писал что везде надо указывать instance name вашего клипа, а вы везде указали ссылку на класс

UserSuperPupsik 13.08.2013 18:25

Котейка, Ваш код творит чудеса!
Код 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), команды написаны по порядку вот и должны выполнятся по порядку! В чем проблема!?! Помогите пожалуйста!

maincode 13.08.2013 18:35

Вложений: 1
Полный код для воспроизведения двух анимаций по очереди:
Код AS3:

import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
import ru.flashpress.tween.events.FPTimelineEvent;
 
var symbol1:Symbol1 = new Symbol1();
this.addChild(symbol1);
symbol1.positionTo = new Point(10, 50);
//
var timelineTurn1:FPTimelineTurn = new FPTimelineTurn(symbol1, 'positionTo');
timelineTurn1.addTween(new Point(20, 100), Strong.easeOut, 1);
timelineTurn1.addTween(new Point(40, 200), Strong.easeOut, 1);
timelineTurn1.start();
timelineTurn1.addEventListener(FPTimelineEvent.FINISH, timeline1FinishHandler);
 
 
var symbol2:Symbol2 = new Symbol2();
this.addChild(symbol2);
symbol2.positionTo = new Point(50, 10);
//
var timelineTurn2:FPTimelineTurn = new FPTimelineTurn(symbol2, 'positionTo');
timelineTurn2.addTween(new Point(100, 20), Strong.easeOut, 1);
timelineTurn2.addTween(new Point(200, 40), Strong.easeOut, 1);
 
function timeline1FinishHandler(event:FPTimelineEvent):void
{
        timelineTurn2.start();
}

Приложил пример во FLA

UserSuperPupsik 13.08.2013 18:39

maincode, Спасибо!
Вот что получилось:
Код AS3:

import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
 
var simbol1:Simbol1;//Simbol1 - название класса символа
simbol1=new Simbol1();
simbol1.x=20;
simbol1.y=30;
addChild(simbol1);
 
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();
}


UserSuperPupsik 13.08.2013 18:55

Вложений: 1
maincode, у меня adobe flash cs5!
Ваш файл не могу открыть.
А Ваш код выдает ошибки!
Код AS3:

import ru.flashpress.tween.display.FPTweenSprite;
import ru.flashpress.tween.timeline.turn.FPTimelineTurn;
import fl.transitions.easing.Strong;
import ru.flashpress.tween.events.FPTimelineEvent;
 
var symbol1:Symbol1 = new Symbol1();
this.addChild(symbol1);
symbol1.positionTo = new Point(10, 50);
//
var timelineTurn1:FPTimelineTurn = new FPTimelineTurn(symbol1, 'positionTo');
timelineTurn1.addTween(new Point(20, 100), Strong.easeOut, 1);
timelineTurn1.addTween(new Point(40, 200), Strong.easeOut, 1);
timelineTurn1.start();
timelineTurn1.addEventListener(FPTimelineEvent.FINISH, timeline1FinishHandler);
 
 
var symbol2:Symbol2 = new Symbol2();
this.addChild(symbol2);
symbol2.positionTo = new Point(50, 10);
//
var timelineTurn2:FPTimelineTurn = new FPTimelineTurn(symbol2, 'positionTo');
timelineTurn2.addTween(new Point(100, 20), Strong.easeOut, 1);
timelineTurn2.addTween(new Point(200, 40), Strong.easeOut, 1);
 
function timeline1FinishHandler(event:FPTimelineEvent):void
{
        timelineTurn2.start();
}

Не смотря на то, что я создал символ simbol2 с классом Simbol2 c базовым классом ru.flashpress.tween.display.FPTweenSprite ошибки такие:

maincode 13.08.2013 19:15

Вложений: 1
пересохранил в CS5

UserSuperPupsik 13.08.2013 19:45

Вложений: 1
maincode, я создал Проект Flash.Поместил в папку проекта файл test.fla, а также FPTween.swc.
Открыл test.fla, нажал ctrl+enter и вуаля получил ошибки:


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

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