Форум 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 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();
}

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


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

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