C++ 包围盒碰撞检测算法
我正在尝试制作一个算法来处理两个边界框(我的播放器和一些实体对象)之间的碰撞,而不使用SFML提供的sf::Rect相交。现在,这就是我检测实际碰撞的方式:C++ 包围盒碰撞检测算法,c++,collision-detection,sfml,C++,Collision Detection,Sfml,我正在尝试制作一个算法来处理两个边界框(我的播放器和一些实体对象)之间的碰撞,而不使用SFML提供的sf::Rect相交。现在,这就是我检测实际碰撞的方式: if (obstacle.GetPosition().x < p.getPlayerPosition().x + p.getPlayerSize().x && obstacle.GetPosition().x + obstacle.GetSize().x > p.getPlayerPosition().x
if (obstacle.GetPosition().x < p.getPlayerPosition().x + p.getPlayerSize().x &&
obstacle.GetPosition().x + obstacle.GetSize().x > p.getPlayerPosition().x &&
obstacle.GetPosition().y < p.getPlayerPosition().y + p.getPlayerSize().x &&
obstacle.GetSize().y + obstacle.GetPosition().y > p.getPlayerPosition().y)
{
// Collision
}
if(障碍物.GetPosition().xp.getPlayerPosition().x&&
障碍物.GetPosition().yp.getPlayerPosition().y)
{
//碰撞
}
但是,我还需要找出玩家在四个障碍物中的哪一个发生碰撞,以便设置正确的玩家位置。有没有人对如何做到这一点有任何想法?这不是最好的方法,但可能会对您有所帮助。
我有两个名为
box1
和box2
var dx = box1.x - box2.x;
var px = (box2.xw + box1.xw) - Math.abs(dx);//penetration depth in x
if(0<px){
var dy = box1.y - box2.y;
var py = (box2.yw + box1.yw) - Math.abs(dy);//penetration depth in y
if(0<py){
// Collision detected
if(px < py){
//project in x
if(dx < 0){
//project to the left
px *= -1;
py *= 0;
}
else{
//proj to right
py = 0;
}
}
else{
//project in y
if(dy < 0){
//project up
px = 0;
py *= -1;
}
else{
//project down
px = 0;
}
}
// we get px and py , penetration vector
box1.x += px;
box1.y += py;
}
}
var dx=box1.x-box2.x;
var px=(box2.xw+box1.xw)-Math.abs(dx)//x方向的穿透深度
如果(0