Pygame: 如何return 精灵碰撞的相对位置

Pygame: how to return relative positions of sprites colliding

我有两组:

a pygame.sprite.GroupSingle() 为玩家 (或者我的玩家精灵对象本身不在任何组中)

关卡中所有对象的 pygame.sprite.Group()

什么是 simplest/best 检查玩家和 sprite 组之间的碰撞以及 return 这两个 sprite 的相对位置的方法 (或者任何会告诉我你不能朝某个方向走所以不进入物体的东西)。 这只是为了创建平台

精灵已经在 sprite.rect 中找到了它们的位置。因此,首先确定碰撞对象列表,然后循环计算相对位置距离的结果是相当容易的。

collided_with = pygame.sprite.spritecollide( player, platform_group, False )
for platform in collided_with:
    relative_x = player.rect.x - platform.rect.x
    relative_y = player.rect.y - platform.rect.y

注意上面player是精灵,不是组。

据我所知Group和GroupSingle没有提供任何碰撞检测功能。 pygame 中的精灵还提供了一个函数 collide_rect,它使用精灵的边界来检测碰撞。缺点是,在许多情况下,精灵的边界不是预期的碰撞边界。

游戏开发中的一种常见方法是使用与玩家、敌人或障碍物关联的额外碰撞对象。在 pygame 中有一个 class Rect 可以用函数 colliderect 为你做这件事。参见:https://www.pygame.org/docs/ref/rect.html#pygame.Rect.colliderect

在很多情况下,矩形就足够了。对于更复杂的碰撞,您必须定义多边形。还有另一个涉及此的计算器问题:Basic 2d collision detection