|
|
|||||
Регистрация: Nov 2010
Сообщений: 6
|
"Умное" перемещение объектов в 3D
Добрый вечер, уважаемые коллеги.
С AS работаю не так давно, и имею не так много опыта как хотелось бы. Но все же и не совсем новичок. Прошу помочь советом с решением одной задачи, связанной с передвижением объектов в 3D. На счене находятся объект mc_cont. В нем, в свою очередь, находятся 10 других объектов. Пусть они имеют имена mc1, mc2...mc10 и имеют произвольно расположение как по осям x,y так и по оси z. Алгоритм действий следующий. 1) При нажатие на кнопку объект mc1 подъезжает и оказывается по центру экрана, а его положение по оси z становится равным 0. 2) При повторном нажатие на кнопку объект mc2 подъезжает и оказывается по центру экрана, а его положение по оси z становится равным 0, и так далее. Я понимаю как сделать обработку кнопки, понимаю что для перемещения следует использовать Tween, понимаю что на самом деле следует перемещать mc_cont а не mc# и использовать GlobalToLocal (LocalToGlobal?). Но как организовать все в целом мне не ясно. Буду благодарен за любую помощь. |
|
|||||
GlobalToLocal или LocalToGlobal - думаю не нужны. Попробуйте сделать что ни будь, и если будут проблемы, то вместе с кодом сюда, а то ведь трудно посоветовать. Вот например код, это документКласс:
package { import fl.transitions.easing.Strong; import fl.transitions.Tween; import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; /** * ... * @author Samana */ public class Main extends Sprite { //этот класс рисует простой круг private var c:NewClass; public function Main() { //создаем круг и распологаем его с лучайных координатах //по всем трём осям c = new NewClass() c.y = Math.random() * 300; c.x = Math.random() * 600; c.z = Math.random() * 3000; addChild(c) //при нажатии любой клавиши.... stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down); } private function key_down(e:KeyboardEvent):void { //круг перемещается из текущего своего положения в центр экрана new Tween(c, "x", Strong.easeOut, c.x, stage.stageWidth/2, 2, true); new Tween(c, "y", Strong.easeOut, c.y, stage.stageHeight/2, 2, true); new Tween(c, "z", Strong.easeOut, c.z, 0, 2, true); } } } |
|
|||||
у Вашего контейнера есть свойство z в переменную "startZ". Это свойство мы сохраняем вначале (от него мы и будем отталкиваться.
Создаём также локальную переменную "i", которую будем инкриментировать при каждой прокрутке. На каждый клик мыши изменяете значение i, после чего твиним z контейнера в в кординату полученную таким образом: Всё, счастье. Добавлено через 2 минуты 2 samana, Цитата:
__________________
ranga |
|
|||||
Регистрация: Nov 2010
Сообщений: 6
|
Цитата:
Samana большое спасибо за подсказку. В целом думал что следует двигаться в этом направление, но не ясно как организовать перемещение всей группы (то-есть mc_cont) что бы mc# оказывался в центре экрана, а остальные объекты так же смещались. |
|
|||||
Регистрация: Nov 2008
Сообщений: 109
|
Вам что, нужна реализация обычной карусели?
UPD:Понял, не карусель, так как рандомное расположение. Последний раз редактировалось yorlin; 11.11.2010 в 19:52. |
|
|||||
Регистрация: Nov 2010
Сообщений: 6
|
Нет, это не карусель.
И я описал расположение объектов как рандомное для упрощения. На самом деле объекты будут расположены четко, но на первый взгляд в довольно хаотичном порядке. |
|
|||||
[+1 16.12.11]
Регистрация: Sep 2010
Сообщений: 57
|
прикольно, только еще z-sorting бы, а то абсурд получается - дальний объект рисуется впереди всех
|
Часовой пояс GMT +4, время: 02:14. |
|
« Предыдущая тема | Следующая тема » |
Теги |
3d , AS 3 , tween |
|
|