网站制作学习网Flash→正文:flash actionScript3 3维旋转效果代码
字体:

flash actionScript3 3维旋转效果代码

Flash 2011/6/28 18:30:38  点击:不统计


用flash的actionScript3.0做一个圆圈状循环特效,主要是逻辑算法问题。收先看下面的效果:



定义场景宽度
var s_w:Number = 400;//定义场景stage 宽度

逻辑分析:
要看到下面的效果,首先看水平轴x的位移。
x轴的位移为 x基础位移(环绕的原点的x轴)+旋转半径*偏移参数(-1到1);
 定义基础位移
  var b_x:Number= 220;//定义基础位置x
  var b_p_x:Number = 200;//定义基础偏移量

再看 竖轴y的位移。
  y轴的位移为 y的基础位移(环绕的原点的y轴)+上下偏移半径*偏移参数(-1到1);
  var b_y:Number = 200;//定义基础位置y
  var b_p_y:Number = 30;//定义基础偏移量
 
运行逻辑:设置整个动画为1帧,处于播放状态。
关键逻辑:如何确定移动速度和偏移参数,这就涉及到算法问题。
1.首先看移动速度,根据鼠标在舞台的中间偏移量来计算。左边为负,右边为正。
  var t_n:Number = 0;//定义的临时变量t_n 用来时刻鼠标位移差
  t_n +=  (stage.mouseX-stage.stageWidth/2)/s_w;//该数值可正可负
2.偏移参数如何计算FORASP.cn
  根据sin 和cos值,sin和cos是从0-1重复的,角度变量从0->正负无穷,则定义每一个对象的偏移量参数为s_in和c_os。
  分析,设sin值用来计算x位移,则cos则计算y位移,因为,当x为0时,y为-1 或者-1,即,当对象在最中间时,对象应该离我们中间距离,也就是离我们最近。
  分析,设sin值用来计算x位移,则cos则计算y位移,因为,当x为1时,y为0,即,当对象在最中间时,对象应该离我们偏左最大偏移
  分析,设sin值用来计算x位移,则cos则计算y位移,因为,当x为1时,y为0,即,当对象在最中间时,对象应该离我们偏右最大偏移
  那么  通过t_n来时刻对鼠标偏移进行相加,当偏移过大,则t_n变化大,反之则小。

3.获取计算偏移参数
  因为每个图像不能重复,则要平均分不到圆环中,则将360度分配给n个对象位置,则每个为360/n;即单位偏移量
假设为n=6则第一个为60 第二个为120 ... 网站制作学习网,froasp.cn原创
  obj.range = (t_n+单位位置偏移量)*Math.PI*2/360;//然后每个的偏移t_n+单位位置偏移量,则为整体偏移半径 *PI *2 /360则为该圆圈的弧度。
  obj.s_in = Math.sin(obj.range);//对每个对象进行弧度的sin计算,不管弧度多大或者多小sin后均在 -1 至1中徘徊
  obj.c_os = Math.cos(obj.range);//对每个对象进行弧度的cos计算
4,设置位置,以及显示大小,透明度
  obj.x =  b_p_x * obj.s_in + b_x;//获取水平位置,则为sin*基础偏移量+ 基础位置
  obj.y = (b_p_y + 60 )* obj.c_os+b_y;//同上
  obj.alpha = obj.c_os<0.5?0.5:obj.c_os;//当透明度小于0.5时,则让其等于0.5
  obj.scaleX = obj.c_os+1;//对对象大小改变,当远离我们的时刻cos为-1,sin为0,此时最小
  obj.scaleY = obj.c_os+1;//同上www.forasp.cn本站原创

总体代码如下,其他都不解释了
var b_p_x:Number = 200;//定义基础偏移量
var b_p_y:Number = 30;//定义基础偏移量
var b_x:Number= 220;//定义基础位置x
var b_y:Number = 200;//定义基础位置y
var s_w:Number = 400;//定义场景stage 宽度
var t_n:Number = 0;//temp_num 用来判断sin的百分之
var $num:Number = 6;
for (var i:uint=1; i<=$num; $i++) {
 this["obj"+i].s = $i;
 this["obj"+i].da = 60*$i;
 this["obj"+i].buttonMode=true;
 this["obj" + $i].addEventListener(Event.ENTER_FRAME,P);
}

function P(me:Event):void{
 t_n +=  (stage.mouseX-stage.stageWidth/2)/s_w;
 var obj = me.target;
 obj.range = (t_n+obj.da)*Math.PI*2/360;
 obj.s_in = Math.sin(obj.range);
 obj.c_os = Math.cos(obj.range);
 obj.x =  b_p_x * obj.s_in + b_x;
 obj.y = (b_p_y + 60 )* obj.c_os+b_y;
 obj.alpha = obj.c_os<0.5?0.5:obj.c_os;
 obj.scaleX = obj.c_os+1;
 obj.scaleY = obj.c_os+1;
 this.setChildIndex(obj,(obj.c_os+1)*3);
}


·上一篇:as3.0播放音频代码 >>    ·下一篇:flash actionScript3 Rectangle类 >>
推荐文章
最新文章