3d куб(меню)

Уроки по PHP, Javascript и т.п.
Ответить
Аватара пользователя
lewka151
Сообщения: 54
Зарегистрирован: 16 фев 2010, 21:01

3d куб(меню)

Сообщение lewka151 »

хоть эта тема не касается vkApi, но все же полезный навык и красивое дополнение к вашему приложению))Начнем.

если вы используете контейнер, делаем следущее:
создаем слой wrapper и в первый кадр пишем:

Код: Выделить всё

var wrapper: Object;this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);function onAddedToStage(e: Event): void {   stage.dispatchEvent(new Event(Event.DEACTIVATE));   stage.dispatchEvent(new Event(Event.ACTIVATE)); //переключаем события, тем самым полностью включая все события в контейнере   wrapper = Object(this.parent.parent);   gotoAndPlay(2); //при завершении загрузки идем на второй кадр.   wrapper.addEventListener('onApplicationAdded', function(e: Object): void {   });}
желательно первый кадр оставит пустым.

ели же вы не используете контейнер, просто не делайте то что было написано выше.
на следующем кадре рисуем квадратик. Корректируем его размеры до 200*200. Выделяем его, жмем F8, называем mc_kub, точка регистрация в центре, а остальное не важно. Идем в этот фрагмент ролика, рисуем в нем еще 5 сторон(всего 6). Все стороны 200*200, и все они фрагменты ролика с точкой регистрации в центре. Для удобства сделайте их разных цветов. Все стороны размещаем в mc_kub , выделяем их жмем Ctrl + Alt + 2 , Ctrl + Alt + 5. Теперь идем в монтажный кадр 1 и в кадре где размещен куб пишем:

Код: Выделить всё

this.stop();mc_kub.getChildAt(0).rotationY =90;mc_kub.getChildAt(0).x = 100;// 200\100.если ваши стороны 150*150 то значит --.x= 75. mc_kub.getChildAt(2).rotationY =-90;mc_kub.getChildAt(2).x = -100; mc_kub.getChildAt(1).rotationX =-90;mc_kub.getChildAt(1).y = -100; mc_kub.getChildAt(3).rotationX =90;mc_kub.getChildAt(3).y = 100; mc_kub.getChildAt(4).z = 100; mc_kub.getChildAt(5).z = -100; addEventListener(Event.ENTER_FRAME, loop);function loop(e:Event):void{    SimpleZSorter.sortClips(mc_kub);    mc_kub.rotationY -=(mouseX - 275)*0.02;//ели вы заменяете курсор то меняйте mouseX на cursor.x    mc_kub.rotationX -=(mouseY - 275)*0.02;}
теперь нам нужна библиотека класса. Создаем первый ActionScript документ и пишем в него:

Код: Выделить всё

package {    import flash.display.DisplayObject;    import flash.display.DisplayObjectContainer;    import flash.geom.Matrix3D;          public class SimpleZSorter    {                public static function sortClips(container : DisplayObjectContainer, recursive : Boolean = false) : void        {            if(container != null){                //Check if this displayobjectcontainer has more then 1 child.                var nc:int = container.numChildren;                if(nc > 1){                                        var index:int = 0;                    var vo : SimpleZSortVO;                    var displayObject:DisplayObject;                    var transformedMatrix : Matrix3D;                    var mainParent : DisplayObject = traverseParents(container);                     var sortArray : Array = new Array();                     for(var c:int = 0; c < container.numChildren; c++){                        displayObject = container.getChildAt(c);children.                        if(recursive && (displayObject is DisplayObjectContainer)){                            sortClips(displayObject as DisplayObjectContainer, true);                        }                        transformedMatrix = displayObject.transform.getRelativeMatrix3D(mainParent);                                                sortArray.push(new SimpleZSortVO(displayObject, transformedMatrix.position.z));                    }                                        sortArray.sortOn("screenZ", Array.NUMERIC | Array.DESCENDING);                    for each(vo in sortArray){                        //Change the indices of all objects according to their Z Sorted value.                        container.setChildIndex(vo.object, index++);                    }                }            }else{                throw new Error("No displayobject was passed as an argument");            }        }                private static function traverseParents(container : DisplayObject) : DisplayObject        {            var parent : DisplayObject = container.parent;            var lastParent : DisplayObject = parent;            //Iterate until the parent value is null (we've reached the end of this displayobject chain).            while((parent = parent.parent) != null){                lastParent = parent;            }                    }    }} 
Называем его SimpleZSorter и сохраняем вместе с нашим *.fla в корневой папке.

Теперь создаем второй ActionScript документ и пишем в него:

Код: Выделить всё

package {    import flash.display.DisplayObject;             public class SimpleZSortVO    {        public var object : DisplayObject;        public var screenZ:Number;                public function SimpleZSortVO(object : DisplayObject, screenZ:Number){            this.object = object;            this.screenZ = screenZ;        }    }} 
все готово. Жмем Ctrl + Alt и смотрим че получилось. Каждые стороны куба можно заменить на что угодно, главное не меняя размеров 200*200. У меня например это кнопки меню.
вот что вышло у меня: http://vkontakte.ru/app1847662
VIP
Сообщения: 252
Зарегистрирован: 24 ноя 2009, 18:10

Re: 3d куб(меню)

Сообщение VIP »

афигенно спасибо
Ответить