看到这个动画,不禁让人想到南迁的大雁,一会儿排成"人"字形,一会儿排成"一"字形的壮观场面
思路:1.createEmptyMovieClip(MC),位于舞台中央,使之不断旋转;
2.用MC作载体,复制出num(150)个(p0~p149)影片,全部都依附于MC上;
3.AS中共有2个函数(function),分别为Change()和getShape():
Change():首先,获得一个随机图形编号(shape),然后为所有MC["p"+i]点设置大小及透明度,再调用getShape()获得该点的目标坐标;
getShape():根据shape编号,返回组成该图形的目标坐标;
4.用数组PS[0]存X坐标,PS[1]存Y坐标;
5.MC["p"+i].onEnterFrame:"跑"向各自的目标点.
步骤1:
绘制10*10的圆点,保存为影片剪辑,连接—>导出—>标志符"p"
步骤2:
加入AS代码:
_root.createEmptyMovieClip("MC",
10);
MC._x = 200;
MC._y = 150;
MC.onEnterFrame = function() {
this._rotation += 2;
};
var num:Number = 150;
//圆点p的个数
for (i=0; i
MC.attachMovie("p", "p"+i, i);
}
var PS:Array = new
Array(2);
//PS[0]存储X坐标,PS[1]存储Y坐标.
_root.onMouseDown = function()
{
Change();
//鼠标点击后变换图形
};
function
Change() {
var shape =
int(Math.random()*2);
//获得随机图形
for (i=0; i
p =
MC["p"+i];
p._xscale
= p._yscale=50+Math.random()*50;
p._alpha =
50+Math.random()*50;
getShape(shape);
p.tox = PS[0];
p.toy =
PS[1];
//调用getShape()函数后,获得MC["p"+i]的X,Y目标坐标
p.onEnterFrame =
function() {
this._x
+= 0.1*(this.tox-this._x);
this._y +=
0.1*(this.toy-this._y);
//点MC["p"+i] 向目标坐标移动,
移动步长为0.1*(目标坐标 - 当前坐标);
//越接近目标,步长越小。最终,当前坐标=目标坐标,不再移动。
};
}
}
function
getShape(shape) {
//用shape的值作为判断图形的依据
var R:Number = 100;
var angle:Number =
Math.random()*360*Math.PI/180;
switch (shape)
{
//====================直线======================
case 0 :
PS[0] = -R+random(R*2);
PS[1] = 0;
break;
//====================圆======================
case 1 :
PS[0] =
R*Math.cos(angle);
PS[1] =
R*Math.sin(angle);
break;
}
}
可变化的图形越多,这个程序的观赏性越强
下面补充一些图形,把他们加入switch语句中即可:
var R:Number = 100;
var angle:Number = Math.random()*360*Math.PI/180;
十字
switch (int(Math.random()*2))
{
case 0 :
PS[0] =
-R+random(R*2);
PS[1] =
0;
break;
case 1 :
PS[0] =
0;
PS[1] =
-R+random(R*2);
}
三棱形
var
r = R*Math.cos(3*angle);
PS[0] =
r*Math.cos(angle);
PS[1] =
r*Math.sin(angle);
蝶形
PS[0] =
R*Math.cos(angle);
PS[1] =
R*Math.sin(2*angle);
正方形
RanLine = int(random(4));
switch (RanLine) {
case 0 :
PS[0] =
-R+random(R*2);
PS[1] =
-R;
break;
case 1 :
PS[0] =
-R;
PS[1] =
-R+random(R*2);
break;
case 2 :
PS[0] =
R-random(R*2);
PS[1] =
R;
break;
case 3 :
PS[0] =
R;
PS[1] =
-R+random(R*2);
}
同心圆
lary = random(4);
PS[0] =
lary*40*Math.cos(angle);
PS[1] =
lary*40*Math.sin(angle);
螺旋形
A
= 3;
r = A*angle;
PS[0] = 7*r*Math.cos(r);
PS[1] = 7*r*Math.sin(r);
心形
var
r = R*Math.cos(angle)-R;
PS[0] =
r*Math.cos(angle);
PS[1] = r*Math.sin(angle);
V字
PS[0]
= -R+random(2*R);
PS[1] = -R+Math.abs(PS[0]);
Flash充电:switch语句
1.作用:Switch语句代替if/else的嵌套结构,解决多重选择的问题,让语法更清楚简单。
2.说明:在switch语句中,我们可以将case-break视为次单元。除了default之外,每个次单元的
开头都是case,结尾为break,break的作用是跳离本次switch语句。如果某个case次单元没有加上break,则在执行该区段语句后,
继续往下一个case次单元执行。
3.语法:
switch(键值){
case 条件值1:
//分段1语句
break;
case 条件值2:
//分段2语句
break;
case 条件值N:
//分段N语句
break;
default :
//默认语句
}
例1:请改变i的设定看看有什么结果?
var i
= 2;
switch (i) {
case 1 :
trace("i=1");
break;
case 2 :
trace("i=2");
break;
case 3 :
case 4 :
trace("i=3 or i=4");
break;
default :
trace("i is not 1,2,3,4");
}
例2:获得键盘键值实例
var listenerObj:Object = new Object();
listenerObj.onKeyDown = function() {
switch (String.fromCharCode(Key.getAscii()))
{
case "A" :
trace("you pressed A");
break;
case "a" :
trace("you pressed a");
break;
case "E" :
case "e" :
trace("you pressed E or e");
break;
case "I" :
case "i" :
trace("you pressed I or i");
break;
default :
trace("you pressed some other key");
break;
}
};
Key.addListener(listenerObj);