与地图上的障碍物碰撞

时间:2015-05-11 19:07:14

标签: c++ 2d collision allegro5

我试图制造障碍,在碰撞后阻止玩家。简单地说,墙壁。

我已经创建了碰撞检测,如下所示:

if (x > (wall.x1 - wall.boundX) && x < (wall.x + wall.boundX) &&
    y >(wall.y1 - wall.boundY) && y < (wall.y + wall.boundY))
{
    x = 0;
    y = 0;

}

但是,正如你所看到的,它只是将我的玩家对象返回到地图上的(0,0)(顺便说一下,我用鼠标控制我的角色)。我想让它停在他碰撞的地方,并且无法穿过这堵墙。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要将if语句分开处理以分别处理每个墙,然后将xy位置设置为墙的边界:

if (x > wall.x1 - wall.boundX)
    x = wall.x1 - wall.boundX;

if (x < (wall.x + wall.boundX))
    x = wall.x + wall.boundX;

// etc

无论鼠标试图越过墙壁的范围多远,它都会保持在那个位置。