gpt4 book ai didi

c++ - 轴对齐边界框碰撞 : what sides are colliding

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:18 25 4
gpt4 key购买 nike

我正在尝试制作一款类似打砖 block 的游戏,但现在我遇到了碰撞问题。像往常一样,积木是矩形(在我的例子中是正方形),球是圆形,所以都是关于轴对齐的边界框。

到目前为止,我已经掌握了简单的碰撞检测算法,但我需要知道球击中了每 block 砖 block 的哪一侧。例如: Collision cases

到目前为止,我有一个算法可以检查每一侧是否都被击中:

up = left = right = down = 0;

if(mouse.left < brick.left && brick.left < mouse.right && mouse.right < brick.right){
left = 1;
}

if(brick.left < mouse.left && mouse.left < brick.right && brick.right < mouse.right){
right = 1;
}

if(mouse.top < brick.top && brick.top < mouse.bottom && mouse.bottom < brick.bottom){
up = 1;
}

if(brick .top < mouse.top && mouse.top < brick.bottom && brick.bottom < mouse.bottom){
down = 1;
}

但是在靠近角落的碰撞中,比如图像中的第三个,两个标志(例如,左和下)都设置为 1,所以我不知道如何决定。

在这些情况下通常会做什么?

最佳答案

不要只设置为1,设置为穿透深度:

// why is it named mouse?
if(mouse.left < brick.left && brick.left < mouse.right &&
mouse.right < brick.right)
{
left = mouse.right - brick.left;
}

// and so on...

然后当你完成后,你可以选择最小的作为你的主要方面。


顺便说一句,我认为您不需要第三个条件。想象一下这样的情况:

   +-+   |B|+--| |--+|M | |  ||  | |  |+--| |--+   +-+

在这里,您没有左碰撞或右碰撞。

(您可能还想检查其余条件的正确性。)

关于c++ - 轴对齐边界框碰撞 : what sides are colliding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com