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

Flash动画制作
FLASH 初级教程:蝶恋花
Flash8制作会跳舞的星星视觉特效
Flash8制作不断上升的透明泡泡动画
Flash8制作精彩高级动态网页图片菜单
Flash动画中使字体清晰的三种方法
用Flash制作动态放大镜画面效果
FLASH 8 瀑布动画制作方法
Flash打造碧海蓝天
吕聪贤SWiSHmax入门到精通视频教程
常见的loading条制作方法
Flash教程:无AS制作—飘落的红叶
使用html为flash页面添加音乐
入门:巧妙去掉网页中Flash的右键菜单
如何成为一个合格的或者优秀的Flash制作者
Flash制作动漫中常用的眨眼效果动画
用Flash制作螺旋发散特效动画
Flash 8 利用滤镜制作漂亮动画效果
FLASH简单制作探照灯效果
Flash遮罩: 轮辐旋转图文教程
Flash CS3 组件开发教程

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 66 ::
收藏到网摘: 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;