если вы используете контейнер, делаем следущее:
создаем слой 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;}
Код: Выделить всё
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; } } }}
Теперь создаем второй 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; } }}
вот что вышло у меня: http://vkontakte.ru/app1847662