Skip to content

Flash向量-9-球和球

首先,我们看看如何判断2个球发生碰撞。然后,再思考碰撞发生之后,球该怎么运动。

2个球的碰撞

图中有球1(红色)和球2(蓝色)。2个球的球心之间的向量为v(绿色)。只有当v的长度小于两个球的半径只和时,两个球才发生了碰撞。我们需要做的是让2个球刚刚紧挨着,为了达到这个目的,我们需要将球1向v的方向移动一段距离:

pen=v.len-(b1.r+b2.r)

现在,2个球刚好紧贴,我们需要研究下运动向量如何变化。想象一下在两个球之间有一个无形的墙壁,墙壁的方式和球心连线向量的法线方向相同。

2个球碰撞之后的运动向量的改变

图中,黑色向量是向量v的法线,将它作为墙壁向量,用之前的方法计算球1的反弹运动向量。

以下是一个例子,一个球在舞台上移动,另外有几个静态的球。

尝试拖动那些静态的球。

你可以下载fla源文件

把它装起来
你可能想让一个球在另外一个球里面。

假设,b2是大球,b1是小球。判断小球是否移出的条件是:

b2.r<(b1.r+v.len)

当这种情况发生的时候,我们需要将它移动回去,移动多少呢:

var pen=b2.r-(b1.r+v.len)

另外,要注意,计算反弹的时候,我们使用左法线(而不再是右法线):

var vbounce={dx:-v.dy, dy:v.dx, lx:-v.dx, ly:-v.dy};

你可以下载fla源文件

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*