首页 > 解决方案 > 在 pygame.sprite.groupcollide() 中有效地使用 pygame.sprite.collide_mask()

问题描述

这是我的代码:

hit_list = pygame.sprite.groupcollide(all_bats, all_sword, False, True, collided = pygame.sprite.collide_mask(bat_front1, sword1))
for self in hit_list:
    self.bat_health -= 1 
    if self.bat_health == 0:
        self.kill()

bat_front 是我用于 all_bats 中敌人的图像,而 Sword1 是我用于 all_sword 中敌人的图像。此代码位于我的 bat 类的更新部分。当我运行代码时,我收到错误消息“pygame.Surface”对象没有属性“rect”,并且行xoffset = right.rect[0] - left.rect[0]从 sprite.py 中突出显示。当我不使用碰撞功能时,我没有收到任何错误,但碰撞碰撞非常糟糕。我不知道为什么会收到错误消息:/

标签: pythonclasspygamesprite

解决方案


您应该将函数本身作为collided参数传递;不是调用它的结果。

所以而不是

hit_list = pygame.sprite.groupcollide(all_bats, all_sword, False, True, collided = pygame.sprite.collide_mask(bat_front1, sword1))

你应该使用

hit_list = pygame.sprite.groupcollide(all_bats, all_sword, False, True, collided = pygame.sprite.collide_mask)

然后groupcollide将使用和collide_mask中的精灵调用它来检查碰撞。all_batsall_sword


推荐阅读