flash 多个小球进行碰撞检测

多个小球进行碰撞检测~~~~~~~~~

整个的代码如下:

m._visible = 0;

function setMc(m_width,w,h,speed) {
stage_w = w-m_width;
stage_h = h-m_width;
for (i=1; i<11; i++) {
M = m.duplicateMovieClip("m"+i, i);
M_x = m_width/2+random(stage_w);
M_y = m_width/2+random(stage_h);
if (i == 1) {
M._x = M_x;
M._y = M_y;
}
if (i>1) {
for (j=1; j<i; j++) {
if (Math.sqrt((this["m"+j]._x-M_x)*(this["m"+j]._x-M_x)+(this["m"+j]._y-M_y)*(this["m"+j]._y-M_y))<m_width) {
i--;
break;
}
}
if (j == i) {
M._x = M_x;
M._y = M_y;
}
}
//以上这些是做小球在一定范围内不重合的随机排列
M.rotation = random(2*Math.PI);
M.xspeed = speed;
M.yspeed = speed;
//初始每个小球的速度,角度
M.onEnterFrame = function() {
this._x += this.xspeed*Math.cos(this.rotation);
this._y += this.yspeed*Math.sin(this.rotation);
//--------------
for (i=1; i<11; i++) {
if (i == this._name.substr(1, this._name.length)) {
continue;
} else if (Math.sqrt((this._y-_root["m"+i]._y)*(this._y-_root["m"+i]._y)+(this._x-_root["m"+i]._x)*(this._x-_root["m"+i]._x))<=m_width) {
this.rotation = Math.atan2(this._y-_root["m"+i]._y, this._x-_root["m"+i]._x);
this.xspeed = speed;
this.yspeed = speed;
this._x += this.xspeed*Math.cos(this.rotation);
this._y += this.yspeed*Math.sin(this.rotation);
break;
}
//每个小球对场景内的其他所有小球进行接触判断,这里的接触用的是距离判断
}
//---------------
if (this._x<=m_width/2) {
this._x = m_width/2+.1;
this.xspeed *= -1;
} else if (this._x>=300-m_width/2) {
this._x = 300-m_width/2-.1;
this.xspeed *= -1;
} else if (this._y<=m_width/2) {
this._y = m_width/2+.1;
this.yspeed *= -1;
} else if (this._y>=300-m_width/2) {
this._y = 300-m_width/2-.1;
//这里-.1的处理是为了防止了边界出现问题,你可以删掉这句看看,原因还是自己动脑想
this.yspeed *= -1; }
};
//这里是对小球碰到边界的判断
}
}
setMc(m._width,300,300,5);//参数分别是小球的宽度,

时间: 2024-11-08 23:29:51

flash 多个小球进行碰撞检测的相关文章

Flash基础理论课 第九章 碰撞检测Ⅱ

返回"Flash基础理论课 - 目录" 距离碰撞检测 本节开始,我们就摆脱了内置hitTest方法,而是将碰撞检测掌握在自己手里.这就要用两个物体间的距离来判断碰撞的发生. 举个现实中的例子,如果你那辆车与我这辆车有100米的距离,我们就知道这两辆车离得足够远,不可能发生碰撞.然而,如果我们的车都有6米宽和12米长,而我这辆车的中心点与你那辆车的中心点只有5米,那么肯定会有些金属被撞弯,保险单会变长.换句话讲,除非车子的某些部分被撞掉以外,两辆车不可能并到一起.这就是整个距离碰撞检测的

Flash基础理论课 第九章 碰撞检测Ⅰ

返回"Flash基础理论课 - 目录" 到目前为止,我们已经学习了物体在其空间的内交互运动.接下来研究一下物体之间的交互运动.这就需要确定物体间何时发生了碰撞,这就是我们所讲的碰撞检测(Collision detection或Hit testing). 本章我会尽量将所有需要掌握的相关知识告诉大家.其中包括两个影片的碰撞,影片与点之间的碰撞,用距离检测碰撞以及多物体碰撞检测方法.首先,来看一下有什么现成的碰撞检测方法. 碰撞检测方法 碰撞检测的思想非常非常简单.我们只要知道两个物体是否

Flash Action实现小球沿不规则的路径上移动

用了BitmapData.getPixel();来做的.原理:路径为一像素的纯色的不规则的曲线(如红色),用getPixel();记录曲线上的所有坐标. import flash.display.BitmapData; import flash.geom.Point; var pointArr:Array = []; var ypos:Number = 200; var curve:MovieClip = this.createEmptyMovieClip("curve", 10);

Flash中随机运动小球的源码解析

在舞台绘制一个圆转换为影片剪辑元件,实例名称为mc,在第一帧添加以下代码: function fanhui(x1, x2, y1, y2) {//计算并返回定义的坐标和对象坐标相加的平方根 Sqrt = Math.sqrt(x1+x2+y1+y2); return Sqrt; } function chushizhi(obja) { endX = random(550);//定义的X坐标 endY = random(400);//定义的X坐标 d = fanhui(endX, endY, obj

Flash/Flex学习笔记(41):碰撞检测

碰撞检测基本上可能分为二类:对象与对象的碰撞检测.对象与点的碰撞检测 为了方便测试,先写一个box类(生成一个小矩形) package { import flash.display.Sprite; public class Box extends Sprite { private var w:Number; private var h:Number; private var color:uint; public var vx:Number=0; public var vy:Number=0; p

Flash基础理论课

Flash基础理论课 第一章 基础动画概念 Flash基础理论课 第二章 ActionScript 3.0 动画基础Ⅰ Flash基础理论课 第二章 ActionScript 3.0 动画基础Ⅱ Flash基础理论课 第三章 三角学应用Ⅰ Flash基础理论课 第三章 三角学应用Ⅱ Flash基础理论课 第四章 渲染技术Ⅰ Flash基础理论课 第四章 渲染技术Ⅱ Flash基础理论课 第四章 渲染技术Ⅲ Flash基础理论课 第五章 速度与加速度Ⅰ Flash基础理论课 第五章 速度与加速度Ⅱ

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class Ball extends Sprite{ private var radius:Number ;//半径 private var color:uint;//颜色 public function Ball(r:Number=50,c:uint=0xff0000){ this.radius = r; this.color = c; init(); } p

Flash/Flex学习笔记(24):粒子效果

粒子爆炸: 仍然要用到以前的小球类,不过稍加改造 package { import flash.display.Sprite; //小球 类 public class Ball extends Sprite { public var radius:uint;//半径 public var color:uint;//颜色 public var vx:Number=0;//x轴速度 public var vy:Number=0;//y轴速度 public function Ball(r:Number

Flash/Flex学习笔记(18):画线及三角函数的基本使用

Sprite有一个graphics可以用来绘制基本图形,比如我们要画下面这个图形: 对应的AS3代码为: package { import flash.display.Sprite; public class Arrow extends Sprite { public function Arrow():void { init(); } private function init():void{ graphics.lineStyle(1,0,1); graphics.beginFill(0xfff