2D像素级碰撞检测

在你的游戏中,如果有物体碰撞时,你会想要它们处理一些事情;这时就需要你能发现是否它们碰撞了和多少个物体发生了碰撞;这里我不打算写出实现的碰撞检测算法,而是讲如何写出算法,算法的实现的事情就由各位读者自己来完成了。

首先给出两物体如下:

(物体1

(物体2

 

物体1和物体2的左上角座标分别为(AX1,AY1)(BX1,BY1).

物体1和物体2的右下角座标分别为(AX2,AY2)(BX2,BY2).

我们知道只有当物体1矩形(AX1,AY1)-(AX2,AY2)和物体2矩形(BX1,BY1)-(BX2,BY2)有相交时,两物体才有可能碰撞;

因此我们可以列出不碰撞的情况,也就是当

情况1BY2<AY1

情况2AY2<BY1

情况3BX2<AX1

情况4AX2<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碰撞;碰撞的多少,则检测红色区域的多少了。

 

到此本文就些结束,此文为我翻译来的;如有误,请见谅。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值