当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > Flash教程:用AS打造小球自由运动和碰撞检测的动画

Flash动画制作
Flash MV音乐和字幕的制作(下)
最强大的Flash反编译工具(一)
Flash制作空战游戏(四)
Flash菜单轻松做 上
Flash菜单轻松做 下
Flash 三小时上手
Flash 三小时上手(二)
Flash 三小时上手(三)
Flash5 位移操作(三)
Flash层的运用(三)
Flash层的运用(四)
实例学用Flash MX增强的AS功能(1)
Flash MX的自由变形工具(2)
Flash MX 视频导入功能详解(1)
Flash MX 文本工具手册(1)
Flash MX 文本工具手册(2)
Flash MX 文本工具手册(3)
Flash MX 文本工具手册(4)
Flash MX 文本工具手册(5)
Flash MX 文本工具手册(6)

Flash动画制作 中的 Flash教程:用AS打造小球自由运动和碰撞检测的动画


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 92 ::
收藏到网摘: n/a

利用flash Actionscript对小球运动进行管理,并且实现对碰撞的检测的实例代码。

友情提示:教程的最后提供源文件下载

启动Flash 8,修改文档属性如下图。

Flash AS制作小球自由运动和碰撞检测的动画

接着建立影片剪辑,设置如下。

Flash AS制作小球自由运动和碰撞检测的动画

看不到动画效果的朋友请去这里观看:http://bbs.ruanchen.com/"gadspro">

然后回到主场景中,在第一帧输入下面代码:

 number_of_balls = 6;//可能会引起问题发生的!建议这里最大数为3。我提供的演示有问题了。
speed_limit = 10;//速度的设置。
for (x=1; x<=number_of_balls; x++) {
 ball = attachMovie("ball", "ball_"+x, _root.getNextHighestDepth(), {_x:Math.random()*400-50, _y:Math.random()*300-50});
 ball.collision = 0;
 ball.mass = 1;
 ball.xspeed = Math.random()*8-4;
 ball.yspeed = Math.random()*8-4;
 ball.onEnterFrame = function() {
  if (this._x<15) {
   this._x = 15;
   this.xspeed *= -1;
  }
  else if (this._x>485) {
   this._x = 485;
   this.xspeed *= -1;
  }
  if (this._y<15) {
   this._y = 15;
   this.yspeed *= -1;
  }
  else if (this._y>385) {
   this._y = 385;
   this.yspeed *= -1;
  }
  if (this.xspeed>speed_limit) {
   this.xspeed = speed_limit;
  }
  if (this.xspeed   this.xspeed = speed_limit*-1;
  }
  if (this.yspeed>speed_limit) {
   this.yspeed = speed_limit;
  }
  if (this.yspeed   this.yspeed = speed_limit*-1;
  }
  this._x += this.xspeed;
  this._y += this.yspeed;
 };
}
function manage_bounce(ball, ball2) {
 dx = ball._x-ball2._x;
 dy = ball._y-ball2._y;
 collisionision_angle = Math.atan2(dy, dx);
 magnitude_1 = Math.sqrt(ball.xspeed*ball.xspeed+ball.yspeed*ball.yspeed);
 magnitude_2 = Math.sqrt(ball2.xspeed*ball2.xspeed+ball2.yspeed*ball2.yspeed);
 direction_1 = Math.atan2(ball.yspeed, ball.xspeed);
 direction_2 = Math.atan2(ball2.yspeed, ball2.xspeed);
 new_xspeed_1 = magnitude_1*Math.cos(direction_1-collisionision_angle);
 new_yspeed_1 = magnitude_1*Math.sin(direction_1-collisionision_angle);
 new_xspeed_2 = magnitude_2*Math.cos(direction_2-collisionision_angle);
 new_yspeed_2 = magnitude_2*Math.sin(direction_2-collisionision_angle);
 final_xspeed_1 = ((ball.mass-ball2.mass)*new_xspeed_1+(ball2.mass+ball2.mass)*new_xspeed_2)/(ball.mass+ball2.mass);
 final_xspeed_2 = ((ball.mass+ball.mass)*new_xspeed_1+(ball2.mass-ball.mass)*new_xspeed_2)/(ball.mass+ball2.mass);
 final_yspeed_1 = new_yspeed_1;
 final_yspeed_2 = new_yspeed_2;
 ball.xspeed = Math.cos(collisionision_angle)*final_xspeed_1+Math.cos(collisionision_angle+Math.PI/2)*final_yspeed_1;
 ball.yspeed = Math.sin(collisionision_angle)*final_xspeed_1+Math.sin(collisionision_angle+Math.PI/2)*final_yspeed_1;
 ball2.xspeed = Math.cos(collisionision_angle)*final_xspeed_2+Math.cos(collisionision_angle+Math.PI/2)*final_yspeed_2;
 ball2.yspeed = Math.sin(collisionision_angle)*final_xspeed_2+Math.sin(collisionision_angle+Math.PI/2)*final_yspeed_2;
}
_root.onEnterFrame = function() {
 for (x=1; x  for (y=x+1;