追逐玩家的实体之间的碰撞检测

时间:2011-12-27 17:36:43

标签: c++ 2d collision-detection

我一直试图让碰撞与我的小型自上而下游戏一起工作。我有一堆追逐玩家的实体。如果我没有碰撞,他们显然最终会捆绑在完全相同的位置。我知道如何检查是否发生了碰撞,但是如何对它作出反应是我无法弄清楚的。我有点工作,只是搞乱了几个小时,但它并不是很好。

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);
    }

}

我可能刚刚完成了一个错误的方式,或者我可能只是缺少一些东西,所以任何帮助都会受到赞赏。

1 个答案:

答案 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)

希望,我没有在公式中犯错:)