我一直在尝试在C中编写一些碰撞检测代码,下面是我现在拥有的函数,但是它被称为每一帧然而由于某种原因,当2个精灵重叠时碰撞不起作用
short int Collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
{
int left1, left2;
int right1, right2;
int top1, top2;
int bottom1, bottom2;
left1 = x1;
left2 = x2;
right1 = x1 + w1;
right2 = x2 + w2;
top1 = y1;
top2 = y2;
bottom1 = y1 + h1;
bottom2 = y2 + h2;
if ((bottom1 < top2)||(top1 > bottom2)||(right1 < left2)||(left1 > right2))
{
return(1);
}
else
{
return(0);
}
};
if (Collision ==1)
{
//code for collision here
}
非常感谢正确指示的任何指针
答案 0 :(得分:1)
我知道,有一个正确的单一条件,有32个标签和16个操作员,但它不可能阅读并且容易搞砸。我的建议是:写更多但更简单的条件。
bool collision = false;
do {
if (top1 > bottom2) break; // 1 is under 2
if (top2 > bottom1) break; // 1 is beyond 2
if (left1 > right2) break; // 1 is right to 2
if (left2 > right1) break; // 1 is left to 2
// I think we listed all the non-collide cases
collision = true;
} while (false);
如果“触摸”计为非碰撞,则应使用&gt; =代替&gt; -s。一个好的编译器应该从这个和长期复杂的条件产生相同的代码。
答案 1 :(得分:0)
请记住,(0,0)顶点是左上角而不是左下角。 因此,y(垂直轴)向下增加,x(水平轴)向右增加。
所以,bottom1 < top2
表示没有碰撞
类似的是你的其他条件