Форум 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=153544)

borisphen 04.04.2011 19:28

Движение спрайта по кривой
 
День добрый.
Столкнулся с такой проблемой.
У меня есть объект типа Sprite мне необходимо его плавно переместить из точки А в точку Б по кривой.
Перемещать думаю с помощью Tweener, есть промежуточная точка для построения кривой Безье (A.x, B,y)
Массив с координатами всех промежуточных точек на кривой тоже есть.
Но я не знаю как этим всем воспользоваться, найдены примеры типа
Код AS3:

Tweener.addTween(myMC, {_x:10, _y:10, _bezier:{_x:20, _y:20}, time:1, transition:"easeoutquad"});

Но в нем как я понял _x и _y это конечная точка, а в _bezier:{} - контрольная, поправьте если я ошибаюсь.
Так же появляется ошибка что параметр _bezier отсутствуе у объекта. Опять же если не ошибаюсь, такое свойство есть у Movie Clip но нет у Sprite.

Делаю все во Flash Builder.

Подскажите как решить задачу с передвижением?

fljot 04.04.2011 20:39

В интернетах разные документации чтоли
Код AS3:

CurveModifiers.init();
Tweener.addTween(myMC, {_x:10, _y:10, _bezier:[{_x:20, _y:20}, {_x:30, _y:30}], time:1});


Alex Lexcuk 04.04.2011 21:15

Зацените движение спрайта по кривой
http://www.kirupa.com/forum/showthread.php?t=362193

dodoaav 04.04.2011 21:43

Вот пример движения по кривым Безье. Из него можно понять принцип работы
http://labs.zeh.com.br/blog/?p=104

borisphen 05.04.2011 17:11

Цитата:

Вот пример движения по кривым Безье. Из него можно понять принцип работы
http://labs.zeh.com.br/blog/?p=104
Именно оттуда был кусок кода в первом посте. К сожалению не разобрался.
_x, _y это конечная точка "прибытия" объекта?
_bezier - вот это меня и смутило... Это массив - свойство объекта который я хочу переместить? Если да то каково его назначение? Это массив точек по кривой безье или что другое?

in4core 05.04.2011 17:16

Цитата:

Зацените движение спрайта по кривой
http://www.kirupa.com/forum/showthread.php?t=362193
Божественно D)
Код AS3:

addChild(debSp = new Sprite());
  addChild(persSp = new Sprite());


borisphen 05.04.2011 17:30

Уточняю вопрос.
В классе, объект которого я хочу плавно переместить в основном коде, нужно добавить такую запись?
Код AS3:

public var _bezier: Array = new Array();

А в основном коде
Код AS3:

Tweener.addTween(myMC, {_x:10, _y:10, _bezier:[{_x:20, _y:20}, {_x:30, _y:30}], time:1});

Попробовал так, но получил ошибку: cannot convert NaN to Array

КорДум 05.04.2011 17:32

in4core, что вас смутило в этой записи?

borisphen 05.04.2011 19:47

"Вы не отвечаете на мой ответ" (С) Антон Уральский

MAPUTO 05.04.2011 20:40

_x и _y - это имена свойств объекта myMC, к которым применяется твинер. Только для AS3 это соответственно x и y. Все остальное тоже для AS2 у Вас.

borisphen 05.04.2011 22:08

А как же в AS3 это все будет выглядеть?? (в частности _bezier)

Добавлено через 34 минуты
Поменял для свойства _bezier передвигаемого класса тип с Array на Object
Код AS3:

public var _bezier:Object;

Ошибка пропала. Но объект движется просто по прямой хотя _bezier содержится массив точек кривой безье.
Так же в консоль вывело: ## [Tweener] Error: The property '_bezier' doesn't seem to be a normal object property of [object Card] or a registered special property.

dimarik 05.04.2011 23:08

Есть еще от мэтра.

borisphen 05.04.2011 23:17

На этом ресурсе тоже был. Но меня интересуют не кривые, кривую я уже построил, а как двигать по ней объект типа Sprite с помощью Tweener

dimarik 05.04.2011 23:46

А там нет разве примеров?

silin 05.04.2011 23:50

да полно там примеров..
Код AS3:

var myMC:Sprite = new Sprite();
myMC.graphics.beginFill(0xFF0000);
myMC.graphics.drawCircle(0, 0, 20);
addChild(myMC);
CurveModifiers.init();
Tweener.addTween(myMC, { x:400, y:400, _bezier: { x:400, y:0 }, time:1 } );


borisphen 06.04.2011 00:02

Silin, огромное спасибо!
Строчка CurveModifiers.init(); поставила все на свои места :)

Добавлено через 23 часа 29 минут
Вот что еще хочу узнать мне нужно в цикле массив объектов передвинуть в разные точки сцены, причем не одновременно а передвинулся первый, затем второй и т.д. Как я понял нужно использовать delay
Код AS3:

Tweener.addTween(myMC, { x:400, y:400, _bezier: { x:400, y:0 }, time:1 ,delay:1} );

Но если эту функцию использовать внутри цикла, то задержка произойдет в самом начале, а затем все объекты одновременно переместятся по своим траекториям.
Как же сделать что бы передвижение происходило последовательно один за одним??

fljot 06.04.2011 23:35

Внезапно: delay: i * k, k = временной коэф

borisphen 07.04.2011 00:50

Блин, как все оказалось просто )))
Спасибо, fljot!


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

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