【问题标题】:Colliding with obstacles on a map与地图上的障碍物相撞
【发布时间】:2015-07-22 10:20:47
【问题描述】:

我试图在碰撞后制造障碍物来阻止玩家。简单来说就是墙壁。

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

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)(顺便说一下,我正在使用鼠标来控制我的角色)。我希望它停在他碰撞的地方,并且无法穿过这堵墙。

我该怎么做?

【问题讨论】:

  • 你知道碰撞前角色的最后一个位置吗?
  • 这也是问题所在,因为字符的位置与鼠标指针的位置有关。就像 " if (x = move.x) x = move.x; } " 对其余方向以此类推(x 是角色的 X, move.x 是鼠标的 X)。

标签: c++ 2d collision allegro5


【解决方案1】:

您需要将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

无论鼠标试图越过墙的边界多远,它都会停留在那个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多