【发布时间】:2011-02-05 00:39:01
【问题描述】:
我正在尝试制作类似打砖块的游戏,但现在我遇到了碰撞问题。像往常一样,砖块是矩形(在我的例子中是正方形),而球是一个圆形,所以它都是关于轴对齐的边界框。
到目前为止,我已经掌握了简单的碰撞检测算法,但我需要知道球击中每块砖的哪一面。例如:
到目前为止,我有一个算法可以检查每一面是否被击中:
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,所以我不知道如何决定。
在这些情况下通常会做什么?
【问题讨论】:
-
反向轨迹?这是字面上的“边缘情况”。你需要决定在这里做什么。不是真的:做你认为合适的事。
-
为什么需要知道哪个边?如果您尝试对球进行适当的反射,则应该做其他事情,例如点/胶囊碰撞与所有 4 个边缘。
标签: c++ collision-detection aabb