【发布时间】:2020-06-06 14:05:14
【问题描述】:
我有两个组:
玩家的pygame.sprite.GroupSingle()
(或者我让玩家精灵对象本身不在任何组中)
pygame.sprite.Group() 表示关卡中的所有对象。
检查玩家和精灵组之间的碰撞并返回这两个精灵的相对位置的最简单/最好的方法是什么 (或任何会告诉我你不能去某个方向所以不能进入物体的东西)。 这只是为了创建平台
【问题讨论】:
我有两个组:
玩家的pygame.sprite.GroupSingle()
(或者我让玩家精灵对象本身不在任何组中)
pygame.sprite.Group() 表示关卡中的所有对象。
检查玩家和精灵组之间的碰撞并返回这两个精灵的相对位置的最简单/最好的方法是什么 (或任何会告诉我你不能去某个方向所以不能进入物体的东西)。 这只是为了创建平台
【问题讨论】:
精灵已经在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 中有一个类 Rect 可以用函数 colliderect 为你做这件事。见:https://www.pygame.org/docs/ref/rect.html#pygame.Rect.colliderect
在许多情况下,矩形就足够了。对于更复杂的碰撞,您必须定义多边形。还有一个关于这个的stackoverflow问题:Basic 2d collision detection
【讨论】: