在你的游戏中,如果有物体碰撞时,你会想要它们处理一些事情;这时就需要你能发现是否它们碰撞了和多少个物体发生了碰撞;这里我不打算写出实现的碰撞检测算法,而是讲如何写出算法,算法的实现的事情就由各位读者自己来完成了。
首先给出两物体如下:
(物体1)
(物体2)
物体1和物体2的左上角座标分别为(AX1,AY1)和(BX1,BY1).
物体1和物体2的右下角座标分别为(AX2,AY2)和(BX2,BY2).
我们知道只有当物体1矩形(AX1,AY1)-(AX2,AY2)和物体2矩形(BX1,BY1)-(BX2,BY2)有相交时,两物体才有可能碰撞;
因此我们可以列出不碰撞的情况,也就是当
情况1:BY2<AY1
情况2:AY2<BY1
情况3:BX2<AX1
情况4:AX2<BX1
如果其中任一值为真则两物体一定不碰撞;
如果全部为假则两物体有可能碰撞;
到这里已经是个基本的碰撞检测算法了,如果更深入进行碰撞检测的话,可以依如下做法;
首先我们找出两矩形的相交区域(CX1,CY1),(CX2,CY2),这个有四种情况如下伪代码所示:
if(AX1<BX1)
{
CX1ßBX1;
CX2ßAX2;
}
Else
{
CX1ßAX1;
CX2ßBX2;
}
if(AY1<BY1)
{
CY1ßBY1;
CY2ßAY2;
}
Else
{
CY1ßAY1;
CY2ßBY2;
}
现在让我们看一张碰撞的图:
我们把上面的图用两个矩形框来表示,如下图所示:
其中物体A用蓝色矩形表示,物体B用红色矩形表示,紫色代表两个矩形相交的区域;
这个紫色区域就是以下的图了:
然后我们看一下物体A和物体B相交区域的图形:
图1物体A
图2物体B
然后我们找出在图1和图2中像素都不为黑色的部分;如下图所示
其中白色部分为有像素部分,黑色为无像素部分,红色为两物体都为有像素的部分;如果有存在红色的部分,则说明物体A和物体B碰撞;碰撞的多少,则检测红色区域的多少了。
到此本文就些结束,此文为我翻译来的;如有误,请见谅。