Flash AS实现的一种不规则曲线运动
类别: Flash教程
记得刚开始学AS的时候!就请教过很多人这方面的AS!但效果总是不理想!这几天没事看了看数学资料找到了意外的收获呀!和大家一起分享!看来数学还是很重要的!只怪当然对这科不感冒,没用心学呀!呵呵呵。
演示效果:(鼠标单击动画之后不放开试试会看到什么?)
第一帧:
x=0
i=0
//lovex和lovey两个数组分别保存LOVE这个字的主要坐标!
lovex=new Array(175,175,175,175,175,195,215,235,255,255,255,275,295,315,315,315,295,275,325,325,325,340,355,37
0,385,385,385,405,425,445,465,405,405,425,445,465,405,405,425,445,465)
lovey=new Array(168,188,208,228,248,248,248,248,188,208,228,248,248,228,208,188,168,168,168,188,208,228,248,22
8,208,188,168,168,168,168,168,188,208,208,208,208,228,248,248,248,248)
its0.itlovex=lovex[0]//在虫0下定一个变量保存按下鼠标后虫0的X坐标
its0.itlovey=lovey[0]//在虫0下定一个变量保存按下鼠标后虫0的y坐标
第二帧i=0
//lovex和lovey两个数组分别保存LOVE这个字的主要坐标!
lovex=new Array(175,175,175,175,175,195,215,235,255,255,255,275,295,315,315,315,295,275,325,325,325,340,355,37
0,385,385,385,405,425,445,465,405,405,425,445,465,405,405,425,445,465)
lovey=new Array(168,188,208,228,248,248,248,248,188,208,228,248,248,228,208,188,168,168,168,188,208,228,248,22
8,208,188,168,168,168,168,168,188,208,208,208,208,228,248,248,248,248)
its0.itlovex=lovex[0]//在虫0下定一个变量保存按下鼠标后虫0的X坐标
its0.itlovey=lovey[0]//在虫0下定一个变量保存按下鼠标后虫0的y坐标
x++
第三帧if (x<41){
its0.duplicateMovieClip("its" + x, x)//复制40个小虫个
this["its"+x].itlovex=lovex[x]//在虫x下定一个变量保存按下鼠标后虫x的X坐标
this["its"+x].itlovey=lovey[x]//在虫x下定一个变量保存按下鼠标后虫x的y坐标
gotoAndPlay(2)
}else{
stop()
}
虫子its0这个MC上代码:its0.duplicateMovieClip("its" + x, x)//复制40个小虫个
this["its"+x].itlovex=lovex[x]//在虫x下定一个变量保存按下鼠标后虫x的X坐标
this["its"+x].itlovey=lovey[x]//在虫x下定一个变量保存按下鼠标后虫x的y坐标
gotoAndPlay(2)
}else{
stop()
}
onClipEvent (load) {//加载时设定初始值
ang = Math.random();//随机产生虫子的初始弧度值
incr = Math.random()/100;//随机产生虫子的弧度值增量
aimx = random(600)-300;//随机产生两个虫子的椭圆运动长短半径,范围根据你FLASH的尺寸来设,我的是600*400中心点是(3
00,200)
x=random(600)-300;
aimy = random(400)-200
y=random(400)-200;
xy = random(200)-100;//随机产生虫子中心偏位值
_xscale = _yscale=_yscale*(Math.random()+.1);//随机产生虫子大小比例 由于考虑到按鼠标后字体的美观,暂时没有用
}
onClipEvent(mouseDown){_root.i=1}
onClipEvent(mouseUp){_root.i=2}
onClipEvent (enterFrame) {
if (_root.i == 1) {//当i==1时即按下鼠标时 虫子移动到LOVE指定的点
_x = _x+(itlovex-_x)/10;
_y = _y+(itlovey-_y)/10;
}
if (_root.i == 2) {//当i==2时即按下鼠标时 虫子移回按下鼠标前的位置
ix=Math.cos(ang)*x+300+xy//计算按下鼠标前虫子的位置
iy=Math.sin(ang)*y+200+xy
_x = _x+(ix-_x)/5;//移动虫子到按下鼠标前的位置
_y = _y+(iy-_y)/5;
if (Math.abs(ix-_x)<=1 and Math.abs(iy-_y)<=1) {_root.i = 0;}//当虫子接近(ix,iy)即回到按下鼠标前的位置时,设i=0
}
if (_root.i == 0) {//当i==0时即没有鼠标动作时
x = x+(aimx-x)/150;//根据两个随机长短半径差值计算出虫子的长短半径
y = y+(aimy-y)/150;
_x = Math.cos(ang)*x+300+xy;//计算虫子的椭圆运动的轨迹
_y = Math.sin(ang)*y+200+xy;
ang = ang+incr;//弧度递增
}
}
ang = Math.random();//随机产生虫子的初始弧度值
incr = Math.random()/100;//随机产生虫子的弧度值增量
aimx = random(600)-300;//随机产生两个虫子的椭圆运动长短半径,范围根据你FLASH的尺寸来设,我的是600*400中心点是(3
00,200)
x=random(600)-300;
aimy = random(400)-200
y=random(400)-200;
xy = random(200)-100;//随机产生虫子中心偏位值
_xscale = _yscale=_yscale*(Math.random()+.1);//随机产生虫子大小比例 由于考虑到按鼠标后字体的美观,暂时没有用
}
onClipEvent(mouseDown){_root.i=1}
onClipEvent(mouseUp){_root.i=2}
onClipEvent (enterFrame) {
if (_root.i == 1) {//当i==1时即按下鼠标时 虫子移动到LOVE指定的点
_x = _x+(itlovex-_x)/10;
_y = _y+(itlovey-_y)/10;
}
if (_root.i == 2) {//当i==2时即按下鼠标时 虫子移回按下鼠标前的位置
ix=Math.cos(ang)*x+300+xy//计算按下鼠标前虫子的位置
iy=Math.sin(ang)*y+200+xy
_x = _x+(ix-_x)/5;//移动虫子到按下鼠标前的位置
_y = _y+(iy-_y)/5;
if (Math.abs(ix-_x)<=1 and Math.abs(iy-_y)<=1) {_root.i = 0;}//当虫子接近(ix,iy)即回到按下鼠标前的位置时,设i=0
}
if (_root.i == 0) {//当i==0时即没有鼠标动作时
x = x+(aimx-x)/150;//根据两个随机长短半径差值计算出虫子的长短半径
y = y+(aimy-y)/150;
_x = Math.cos(ang)*x+300+xy;//计算虫子的椭圆运动的轨迹
_y = Math.sin(ang)*y+200+xy;
ang = ang+incr;//弧度递增
}
}
-= 资 源 教 程 =-
文 章 搜 索