旋转的导航菜单

来源:互联网 发布:北京做网络推广的公司 编辑:程序博客网 时间:2024/05/16 06:51

 下面是旋转的导航菜单(即按钮是绕椭圆轨迹转动) 

 

下面只是一个的Circle类是用程序写的一个按钮  (该类你可以换成其他的按钮,或者可以直接在flash直接画出来)

 

你可以自己加上按钮本身的交互性 (只需加个侦听器就可以了,)

 

下面是代码::

主程序是在时间轴上写的 :

 

 

主程序:

 

 

/*
这里用到flash player 10的新增类  vector;  其本质就是个数组 在顶级包 是数组Array的的替代
总结 :一般涉及到角度的都要自增 比如angle+=number   这样比较好

下面的代码是基于时间轴的

*/

 var storeCircle:Vector.<Circle>;//定义圆形按钮数组
   var circle:Circle;//按钮
  var buttonNum:Number;//按钮数
   var angle:Number;//弧度
//  private var setAngle:Number;//每个按钮的弧度;
  var centerX:Number;//椭圆中心
   var centerY:Number;
   var Rx:Number;//椭圆的长半轴
   var Ry:Number;//短半轴


   init();
  
   function init():void {
   addEventListener(Event.ENTER_FRAME,hanleEnterFrame);
   storeCircle=new Vector.<Circle>();
   centerX=stage.stageWidth/2;
   centerY=stage.stageHeight/2;
   Rx=200;
   Ry=100;
   buttonNum=15;
   angle=Math.PI*(360/buttonNum)/180;//平均角度
   //为按钮进行定位  用了椭圆的公式  x=a+RxcosB , y=b+RysinB
   for (var i:uint; i<buttonNum; ++i) {
    var angleOfNow:Number=angle*i;
    circle= new Circle(30,String(i));
    circle.Angle=angleOfNow;// 保存弧度
    circle.x=centerX+Rx*Math.cos(angleOfNow);
    circle.y=centerY+Ry*Math.sin(angleOfNow);
    storeCircle[i]=circle;
    addChild(circle);
   }

 


  }

   function hanleEnterFrame(e:Event):void {
   //下面滑动鼠标 对其进行滑动
   var distance:Number=mouseX-centerX;
   //化为与角度有关系的量
   var angleSpeed:Number=distance/5000;
   //更新按钮坐标
   for (var i:uint=0; i<buttonNum; ++i) {
    storeCircle[i].Angle+=angleSpeed;
    storeCircle[i].x=centerX+Rx*Math.cos(storeCircle[i].Angle);
    storeCircle[i].y=centerY+Ry*Math.sin(storeCircle[i].Angle);
    // 下面对按钮进行缩放: 按钮在中心点上面显示放大:在中心点下面显示缩小
    var disY:Number=centerY-storeCircle[i].y;
    storeCircle[i].scaleY=disY/Ry;
    if (storeCircle[i].y<centerY) {
     storeCircle[i].scaleY*=2;

    }
    storeCircle[i].scaleX=storeCircle[i].scaleY;
    storeCircle[i].alpha=storeCircle[i].scaleX+1.1
    


   }

   }

 

 

 

Circle类:

 

 

/*
Circle 与文本的定位不是很精确

*/

package {
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFormat;
 import flash.display.Graphics;
 public class Circle extends Sprite {
  private var _radius:Number;
  private var _text:TextField;
  private var circle:Sprite;
  private var format:TextFormat;
  private var _input:String;
  private var _angle:Number;
  
  public function Circle(r:Number=30,str:String="0") {
   _radius=r;
   _input=str
   init();
  }
  private function init():void {
   circle= new Sprite();
   circle.graphics.clear();
   circle.graphics.beginFill(0xFFCC99);
   circle.graphics.drawCircle(0,0,_radius);
   circle.graphics.endFill();
   createText();
   addChild(circle);
   circle.addChild(_text);
  }
  private function createText():void {
   _text= new TextField();
   format= new TextFormat();
   _text.autoSize="left";
   _text.width=50;
   _text.height=30;
   format.size=25;
   _text.defaultTextFormat=format;
   _text.text=_input;
   _text.x=circle.x+_radius-3.5*_text.width;// 让数字居中
   _text.y=circle.y+_radius-2*_text.height;

  }

  public function get input():String {
   return _input;
  }
  public function set input(str:String):void {
   _input=str;

  }
  /*public function get radius() :Number{
  return _radius;
  }
  public function set radius(n:Number):void{
  _radius=n;
  
  }
  */

  public function get Angle():Number {
   return _angle;
  }
  public function set Angle(n:Number):void {
   _angle=n;
  }

 }
}

 

 

 

 

 

原创粉丝点击