Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   "Умное" перемещение объектов в 3D (http://www.flasher.ru/forum/showthread.php?t=146568)

kambey80 11.11.2010 18:43

"Умное" перемещение объектов в 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?). Но как организовать все в целом мне не ясно.

Буду благодарен за любую помощь.

samana 11.11.2010 19:04

GlobalToLocal или LocalToGlobal - думаю не нужны. Попробуйте сделать что ни будь, и если будут проблемы, то вместе с кодом сюда, а то ведь трудно посоветовать. Вот например код, это документКласс:
Код AS3:

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


incvizitor 11.11.2010 19:06

у Вашего контейнера есть свойство z в переменную "startZ". Это свойство мы сохраняем вначале (от него мы и будем отталкиваться.

Создаём также локальную переменную "i", которую будем инкриментировать при каждой прокрутке.

На каждый клик мыши изменяете значение i, после чего твиним z контейнера в в кординату полученную таким образом:

Код AS3:

startZ + cont.getChildAt(i).z;
i = (i + 1) % cont.numChildren;

Всё, счастье.

Добавлено через 2 минуты
2 samana,
Цитата:

понимаю что на самом деле следует перемещать mc_cont а не mc#
На сколько я понял топикстартеру нужно что бы прокручивались все объекты.

samana 11.11.2010 19:24

incvizitor
Цитата:

На сколько я понял топикстартеру нужно что бы прокручивались все объекты.
А, возможно и так, я поторопился.

kambey80 11.11.2010 19:37

Цитата:

На сколько я понял топикстартеру нужно что бы прокручивались все объекты.
Да. В том то и дело что необходимо двигать все объекты, но опираясь на то, что они последовательно должны оказываться по центру экрана с z=0.

Samana большое спасибо за подсказку. В целом думал что следует двигаться в этом направление, но не ясно как организовать перемещение всей группы (то-есть mc_cont) что бы mc# оказывался в центре экрана, а остальные объекты так же смещались.

yorlin 11.11.2010 19:48

Вам что, нужна реализация обычной карусели?

UPD:Понял, не карусель, так как рандомное расположение.

kambey80 11.11.2010 20:00

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

samana 12.11.2010 02:16

Вложений: 2
Посмотрите исходник, если ещё не сделали, может поможет.... Для перемещения по кнопкам, кликайте по сцене.

deamoK 12.11.2010 14:19

прикольно, только еще z-sorting бы, а то абсурд получается - дальний объект рисуется впереди всех

samana 12.11.2010 15:19

Цитата:

Сообщение от deamoK (Сообщение 949332)
прикольно, только еще z-sorting бы, а то абсурд получается - дальний объект рисуется впереди всех

А это уже домашнее задание. )


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

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