Flash CS5实例教程:漂亮的气泡动画

2025-12-18 05:34:49
推荐回答(1个)
回答1:

function ball(r:int):MovieClip {//自定义函数 ball,参数为 r,整数型,返回值为 MovieClip

var col:uint = 0xffffff * Math.random();//声明一个无符号整数型变量 col,获取任意颜色

var sh:MovieClip=new MovieClip();//声明一个影片剪辑类实例 sh

sh.graphics.beginGradientFill(GradientType.RADIAL,[0xffffff,col,col],[0.5,1,1],[0,200,255]);
//在 sh 中设置渐变填充样式(放射状渐变,颜色,透明度,色块位置);

sh.graphics.drawCircle(0,0,r);
//在 sh 中画圆(圆心坐标(0,0),半径为参数r);

sh.graphics.endFill();
//结束填充;

return sh;//返回 sh

}

var ballArr:Array = [];//声明一个空数组 ballArr

for (var i:int=0; i<10; i++)
{//创建一个 for 循环,循环 10次

var balls:MovieClip = ball(Math.random() * 20 + 20);//声明一个影片剪辑类实例balls,调用函数 ball(参数r 半径的值为 20-40 之间的随机值)
addChild(balls);//把 balls添加到显示列表

balls.x=Math.random()*(stage.stageWidth-balls.width)+balls.width/2;//balls 的 X 坐标

balls.y=Math.random()*(stage.stageHeight-balls.height)+balls.height/2;//balls 的 Y坐标,使它出现在舞台的任意位置

balls.vx = Math.random() * 2 - 1;//为 balls 设置自定义属性 vx,数值为-1-1 之间的随机数,表示 X 方向的速度

balls.vy = Math.random() * 2 - 1;//为 balls 设置自定义属性 vy,数值为-1-1 之间的随机数,表示 Y 方向的速度

ballArr.push(balls);
}
//把 balls 添加到数组 ballArr 中;



addEventListener(Event.ENTER_FRAME,frame);//添加帧频事件侦听,调用函数 frame

function frame(e) {//定义帧频事件函数 frame

for (var i:int=0; i {//创建一个 for循环,循环次数为数组 ballArr 的元素数

var balls:MovieClip = ballArr[i];//声明一个影片剪辑类实例 balls,获取数组 ballArr 的元素

balls.x +=  balls.vx;//balls的 X 坐标每帧增加balls.vx

balls.y +=  balls.vy;//balls的 Y 坐标每帧增加balls.vy

if (balls.x < balls.width / 2)
{//如果balls 出了舞台左边缘

balls.x = balls.width / 2;//balls 的 X坐标获取balls 宽度的一半

balls.vx *=  -1;//balls.vx 获取它的相反数

}

if (balls.x > stage.stageWidth - balls.width / 2)
{//如果 alls 出了舞台右边缘

balls.x = stage.stageWidth - balls.width / 2;//balls 的 X 坐标获取场景宽度与 balls 宽度一半的差

balls.vx *=  -1;//balls.vx 获取它的相反数

}

if (balls.y < balls.height / 2)
{//如果 balls出了舞台上边缘

balls.y = balls.height / 2;//balls 的 Y坐标获取 balls 高度的一半

balls.vy *=  -1;//balls.vy 获取它的相反数

}

if (balls.y > stage.stageHeight - balls.height / 2)
{//如果 balls 出了舞台下边缘

balls.y = stage.stageHeight - balls.height / 2;//balls 的 Y 坐标获取舞台高度与 balls 高度一半的差

balls.vy *=  -1;//balls.vy 获取它的相反数

}

}

for (var j:int=0; j {//创建一个 for 循环,循环次数比数组 ballArr 元素数少 1

var ball0:MovieClip = ballArr[j];//声明一个影片剪辑类实例 ball0,获取数组 ballArr 的元素

for (var m:int=j+1; m {//创建一个 for 循环,

var ball1:MovieClip = ballArr[m];//声明一个影片剪辑类实例 ball1,获取数组 ballArr 的元素

var dx:Number = ball1.x - ball0.x;//声明一个数值型变量 dx,获取

var dy:Number = ball1.y - ball0.y;//声明一个数值型变量 dy,获取

var jl:Number = Math.sqrt(dx * dx + dy * dy);//声明一个数值型变量 jl,获取小球的距离

var qj:Number = ball0.width / 2 + ball1.width / 2;//声明一个数值型变量获取小球半径之和

if (jl <= qj)
{//如果 jl 小于等于 qj

var angle:Number = Math.atan2(dy,dx);//声明一个数值型变量angle,获取ball1 相对于 ball0 的角度

var tx:Number = ball0.x + Math.cos(angle) * qj * 1.01;//声明一个数值型变量 tx,获取目标点的 X坐标

var ty:Number = ball0.y + Math.sin(angle) * qj * 1.01;//声明一个数值型变量 ty,获取目标点的 Y坐标

ball0.vx=- (tx-ball1.x);//ball0 在X 方向的速度

ball0.vy=- (ty-ball1.y);//ball0 在Y 方向的速度

ball1.vx=(tx-ball1.x);//ball1 在 X方向的速度

ball1.vy=(ty-ball1.y);//ball1 在 Y方向的速度

}

}

}

}

这是确的,亲测可用