python - 在 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 中突出显示。当我不使用碰撞功能时,我没有收到任何错误,但碰撞碰撞非常糟糕。我不知道为什么会收到错误消息:/
解决方案
您应该将函数本身作为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_bats
all_sword
推荐阅读
- lua - Conky cpubar 以错误的方式填充
- node.js - AWS Alexa V2 中的 SSML 支持
- html - Z-Index问题,我没有解释
- c - 想要永远闪烁,直到我在 nodemcu 中按下 OFF
- php - 如何在 Wordpress 自定义元框中保存复选框状态?
- android - Android TextToSpeech 行为不规则
- cucumber - NoClassDefFoundError:com/aventstack/extentreports/reporter/ExtentHtmlReporter
- mysql - 在子表中插入外键,每次都显示为空
- python-3.x - 如何使用return语句在python中返回一个类的变量?
- python - 将新创建并上传的包添加到 pycharm