topical media & game development

talk show tell print

lib-flex-animation-code-07-Carousel.ax

lib-flex-animation-code-07-Carousel.ax (swf ) [ flash ] flex


  package
  {
          import flash.display.DisplayObject;
          import flash.display.Sprite;
          import flash.events.Event;
          import flash.geom.Vector3D;
          
          [SWF(width=800, height=800, backgroundColor = 0xffffff)]
          public class @ax-lib-flex-animation-code-07-Carousel extends Sprite
          {
                  private var _holder:Sprite;
                  private var _items:Array;
                  private var _radius:Number = 200;
                  private var _numItems:int = 10;
                  
                  public function @ax-lib-flex-animation-code-07-Carousel()
                  {
                          root.transform.perspectiveProjection.fieldOfView = 130;
                          _holder = new Sprite();
                          _holder.x = stage.stageWidth / 2;
                          _holder.y = stage.stageHeight / 2;
                          _holder.z = 0;
                          addChild(_holder);
                          
                          _items = new Array();
                          
                          _radius = 200;
                          for(var i:int = 0; i < _numItems; i++)
                          {
                                  var angle:Number = Math.PI * 2 / _numItems * i;
                                  var item:Sprite = makeItem();
                                  item.x = Math.cos(angle) * _radius;
                                  item.z = Math.sin(angle) * _radius;
                                  item.rotationY = -360 / _numItems * i + 90;
                                  _items.push(item);
                          }
                          sortItems();
                          
                          addEventListener(Event.ENTER_FRAME, onEnterFrame);
                  }
                  
                  private function makeItem():Sprite
                  {
                          var item:Sprite = new Sprite();
                          item.graphics.beginFill(Math.random() * 0xffffff);
                          item.graphics.drawRect(-50, -50, 100, 100);
                          _holder.addChild(item);
                          return item;
                  }
                  
                  private function sortItems():void
                  {
                          _items.sort(depthSort);
                          for(var i:int = 0; i < _items.length; i++)
                          {
                                  _holder.addChildAt(_items[i] as Sprite, i);
                          }
                  }
                  
                  private function depthSort(objA:DisplayObject, objB:DisplayObject):int
                  {
                          var posA:Vector3D = objA.transform.matrix3D.position;
                          posA = _holder.transform.matrix3D.deltaTransformVector(posA);
                          var posB:Vector3D = objB.transform.matrix3D.position;
                          posB = _holder.transform.matrix3D.deltaTransformVector(posB);
                          return posB.z - posA.z;
                  }
                  
                  private function onEnterFrame(event:Event):void
                  {
                          _holder.rotationY += (stage.stageWidth / 2 - mouseX) * .01;
                          _holder.y += (mouseY - _holder.y) * .1;
                          sortItems();
                  }
          }
  }
  


(C) Æliens 18/6/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.