Pygame - 检测碰撞方向



所以我开始了一些大的pygame项目,一切都或多或少进展顺利。

但是现在我真的陷入了如何检测碰撞方向的困境。

所以我得到了我的角色(2d 侧滑者(,以及一个用于障碍物的精灵组,这些障碍物现在都是矩形。现在,碰撞检测工作正常,但是,如果是,那么如何,可以检测字符矩形与障碍物的哪一侧碰撞?

<小时 />

如果有人偶然发现这个问题,补充:我最终实施的笨拙解决方案使用了每个障碍物四条(不可见(线的"脚手架",每边一条。一旦检测到与特定障碍物的碰撞,我就会在字典中查找碰撞矩形周围的四条线,然后去检查其中哪条线当前正在与玩家精灵碰撞。它有点工作,但无论如何整个项目都是一团糟。

有许多2D物理库包括碰撞检测,通常像您所说的大型项目需要其他物理场,如约束,光线投射和实体。一个伟大的python库是pyBox2D,并且在他们的github上有很好的文档。pyBox2D 还将为您完全处理碰撞,但您也可以设置自定义冲突处理程序。
对于您的问题,您询问如何检查矩形与哪个位置碰撞,您可以使用pygame执行此操作。这样给出的矩形变量

import pygame

def determineSide(rect1, rect2):
    if rect1.midtop[1] > rect2.midtop[1]:
        return "top"
    elif rect1.midleft[0] > rect2.midleft[0]:
        return "left"
    elif rect1.midright[0] < rect2.midright[0]:
        return "right"
    else:
        return "bottom"
rect1 = pygame.Rect(100, 100, 20, 20)
rect2 = pygame.Rect(100, 90, 20, 20)
print(determineSide(rect1, rect2))  

请注意,这不会检查冲突,而只是检查 rect2 相对于 rect1 的位置。

也许你可以检查一个Rect的四个角中的哪一个或两个在另一个角内。不过,有一个问题 - 如果Rect接触角落,那么程序的其余部分该怎么办。我自己还没有为此编写代码片段,但我也在开发一个平台游戏,并计划创建一个。