3d куб(меню)

Уроки по PHP, Javascript и т.п.

3d куб(меню)

Сообщение lewka151 » 25 мар 2010, 15:18

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

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

желательно первый кадр оставит пустым.

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

  1. this.stop();
  2. mc_kub.getChildAt(0).rotationY =90;
  3. mc_kub.getChildAt(0).x = 100;// 200\100.если ваши стороны 150*150 то значит --.x= 75.
  4.  
  5. mc_kub.getChildAt(2).rotationY =-90;
  6. mc_kub.getChildAt(2).x = -100;
  7.  
  8. mc_kub.getChildAt(1).rotationX =-90;
  9. mc_kub.getChildAt(1).y = -100;
  10.  
  11. mc_kub.getChildAt(3).rotationX =90;
  12. mc_kub.getChildAt(3).y = 100;
  13.  
  14. mc_kub.getChildAt(4).z = 100;
  15.  
  16. mc_kub.getChildAt(5).z = -100;
  17.  
  18. addEventListener(Event.ENTER_FRAME, loop);
  19. function loop(e:Event):void{
  20.     SimpleZSorter.sortClips(mc_kub);
  21.     mc_kub.rotationY -=(mouseX - 275)*0.02;//ели вы заменяете курсор то меняйте mouseX на cursor.x
  22.     mc_kub.rotationX -=(mouseY - 275)*0.02;
  23. }


теперь нам нужна библиотека класса. Создаем первый ActionScript документ и пишем в него:

  1. package {
  2.     import flash.display.DisplayObject;
  3.     import flash.display.DisplayObjectContainer;
  4.     import flash.geom.Matrix3D
  5.    
  6.  
  7.     public class SimpleZSorter
  8.     {
  9.        
  10.         public static function sortClips(container : DisplayObjectContainer, recursive : Boolean = false) : void
  11.         {
  12.             if(container != null){
  13.                 //Check if this displayobjectcontainer has more then 1 child.
  14.                 var nc:int = container.numChildren;
  15.                 if(nc > 1){
  16.                    
  17.                     var index:int = 0;
  18.                     var vo : SimpleZSortVO;
  19.                     var displayObject:DisplayObject;
  20.                     var transformedMatrix : Matrix3D;
  21.                     var mainParent : DisplayObject = traverseParents(container);
  22.  
  23.                     var sortArray : Array = new Array();
  24.  
  25.                     for(var c:int = 0; c < container.numChildren; c++){
  26.                         displayObject = container.getChildAt(c);children.
  27.                         if(recursive && (displayObject is DisplayObjectContainer)){
  28.                             sortClips(displayObject as DisplayObjectContainer, true);
  29.                         }
  30.                         transformedMatrix = displayObject.transform.getRelativeMatrix3D(mainParent);
  31.                        
  32.                         sortArray.push(new SimpleZSortVO(displayObject, transformedMatrix.position.z));
  33.                     }
  34.                    
  35.                     sortArray.sortOn("screenZ", Array.NUMERIC | Array.DESCENDING);
  36.                     for each(vo in sortArray){
  37.                         //Change the indices of all objects according to their Z Sorted value.
  38.                         container.setChildIndex(vo.object, index++);
  39.                     }
  40.                 }
  41.             }else{
  42.                 throw new Error("No displayobject was passed as an argument");
  43.             }
  44.         }
  45.        
  46.         private static function traverseParents(container : DisplayObject) : DisplayObject
  47.         {
  48.             var parent : DisplayObject = container.parent;
  49.             var lastParent : DisplayObject = parent;
  50.             //Iterate until the parent value is null (we've reached the end of this displayobject chain).
  51.             while((parent = parent.parent) != null){
  52.                 lastParent = parent;
  53.             }
  54.            
  55.         }
  56.     }
  57. }
  58.  


Называем его SimpleZSorter и сохраняем вместе с нашим *.fla в корневой папке.

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


  1. package {
  2.     import flash.display.DisplayObject;        
  3.     public class SimpleZSortVO
  4.     {
  5.         public var object : DisplayObject;
  6.         public var screenZ:Number;
  7.        
  8.         public function SimpleZSortVO(object : DisplayObject, screenZ:Number){
  9.             this.object = object;
  10.             this.screenZ = screenZ;
  11.         }
  12.     }
  13. }
  14.  

все готово. Жмем Ctrl + Alt и смотрим че получилось. Каждые стороны куба можно заменить на что угодно, главное не меняя размеров 200*200. У меня например это кнопки меню.
вот что вышло у меня: http://vkontakte.ru/app1847662
 Атака шариков
Аватара пользователя
lewka151

 
Автор темы
Сообщения: 54
Зарегистрирован: 16 фев 2010, 21:01
Откуда: http://vkontakte.ru/id20138940
Благодарил (а): 6 раз.
Поблагодарили: 8 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение VIP » 25 мар 2010, 20:46

афигенно спасибо
VIP

 
Сообщения: 252
Зарегистрирован: 24 ноя 2009, 18:10
Благодарил (а): 23 раз.
Поблагодарили: 1 раз.


Вернуться в Уроки на другие темы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron