使用矢量进行碰撞方向检测[包括插图]

时间:2012-08-21 18:44:47

标签: algorithm collision-detection

我目前正在使用html5画布中的'n'原型。 语言实际上并不那么重要,我只需要提示算法。

首先看一下这个插图:http://i.imgur.com/3CwBI.png

正如你所看到的,我有两个相互碰撞的矩形(白色是玩家,灰色是静态障碍物)。

在预先计算下一帧的同时,如果碰撞即将发生,我需要修复球员的位置。 人脑可以清楚地看出,图像中的白色矩形将落在平台顶部(考虑线性运动)。但是如何告诉这个程序呢?

我正在使用2d向量移动播放器。

编辑:我已经可以检测到碰撞,我只需要知道方向,这样我就可以将玩家位置固定在障碍物的相应一侧。

1 个答案:

答案 0 :(得分:1)

对于播放器的每个角落,在现在的位置和下一帧的位置之间绘制一个线段。

enter image description here

对于每个线段,以及构成平台的每个线段,检查两个线段是否相交。

enter image description here

如果发生任何交叉点,则播放器将在下一帧中与平台发生碰撞。

编辑:

90%的时间,红线段仅与属于平台的单个线段发生碰撞。如果红色部分与平台左侧碰撞,则玩家撞墙;如果片段与平台的顶部发生碰撞,则播放器降落在平台上。

enter image description here

一个角落的情况是顶部和侧面都发生碰撞。

enter image description here

在这种情况下,为了确定哪个碰撞“确实”发生,您需要先确定哪一个碰撞发生。最早的交叉点是最接近早期玩家矩形的交叉点。在上图中,如果右上角的玩家是较早的玩家,那么最早的碰撞就是在平台的顶部。

相关问题