我如何检测一个对象是否在另一个对象之上(如砖块上的马里奥)

How do I detect if an object is on top of another object (like Mario on a brick)

我正在构建一个自动 运行 平台游戏。我有代码,如果角色撞到墙,他们会被推回,直到他们能够越过墙。不幸的是,这意味着当角色试图跳到一个物体上时,他只会被推回去。我如何辨别角色何时位于对象顶部,何时位于对象侧面?

我当前的算法(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# }

这里四个条件太多了。根据角色和墙壁的高度,第一个和第二个条件消除了您的角色实际上在墙上的情况。

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

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