我一直试图让碰撞与我的小型自上而下游戏一起工作。我有一堆追逐玩家的实体。如果我没有碰撞,他们显然最终会捆绑在完全相同的位置。我知道如何检查是否发生了碰撞,但是如何对它作出反应是我无法弄清楚的。我有点工作,只是搞乱了几个小时,但它并不是很好。
if ( check_collision( enemies[e1]->xPos, enemies[e1]->yPos, SIZE_ENEMY, SIZE_ENEMY, enemies[e2]->xPos, enemies[e2]->yPos, SIZE_ENEMY, SIZE_ENEMY ) == true )
{
//the distance that is intersecting
float dx, dy;
if ( enemies[e1]->xPos > enemies[e2]->xPos )
dx = enemies[e2]->xPos + SIZE_ENEMY - enemies[e1]->xPos;
if ( enemies[e2]->xPos > enemies[e1]->xPos )
dx = enemies[e1]->xPos + SIZE_ENEMY - enemies[e2]->xPos;
if ( enemies[e1]->yPos > enemies[e2]->yPos )
dy = enemies[e2]->yPos + SIZE_ENEMY - enemies[e1]->yPos;
if ( enemies[e2]->yPos > enemies[e1]->yPos )
dy = enemies[e1]->yPos + SIZE_ENEMY - enemies[e2]->yPos;
if ( dx < dy )
{
enemies[e1]->xPos += (dx / 2);
enemies[e2]->xPos -= (dx / 2);
}
if ( dy < dx )
{
enemies[e1]->yPos += (dy / 2);
enemies[e2]->yPos -= (dy / 2);
}
}
我可能刚刚完成了一个错误的方式,或者我可能只是缺少一些东西,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
在计算实体的下一个位置时,检查是否会与另一个实体发生冲突。如果是 - 只是不要移动这个实体。
另一种方法是计算从一个实体到另一个实体的距离和向量。距离由毕达哥拉斯定理计算:d = (x1-x2)^2 + (y1-y2)^2
。如果d
&lt; 2*SIZE_ENEMY
,然后它们重叠,您应该将其中一个移动到矢量(x2-x1,y2-y1),至少dd = 2*SIZE_ENEMY - d
:
newx2 = x2 +(x2-x1)* dd /(2 * SIZE_ENEMY)
newy2 = y2 +(y2-y1)* dd /(2 * SIZE_ENEMY)
希望,我没有在公式中犯错:)