如何检测对象是否位于另一个对象之上(如砖块上的Mario)

时间:2016-04-25 14:16:48

标签: language-agnostic collision-detection

我正在构建一个自动运行的平台游戏。我有代码,以便如果角色与墙碰撞,它们会被推回,直到它们能够越过墙壁。不幸的是,这意味着当角色试图跳过一个物体时,他就会被推倒。如何判断一个角色在一个物体顶部何时位于一侧?

My Current Algorithm(c-ish因为我喜欢c-ish语法):

if (wall.Top < (character.Top + character.Height) &&
    wall.Left < (character.Left + character.Width) &&
   (wall.Top + wall.Height) > character.Top &&
   (wall.Left + wall.Width) > character.Left) { #code here# }

1 个答案:

答案 0 :(得分:1)

这里有四个条件太多了。根据角色的高度和墙壁的高度,第1和第2条件可以消除角色实际上在墙上的情况。

假设您认为角色位于墙顶,如果其中心底部位于墙顶,则可以执行以下操作:

character.Center = character.Left + character.Width / 2;
if (character.Center > wall.Left &&
    character.Center < wall.Left + wall.Width &&
    character.Top - character.Height > wall.Top) { ... }