Pygame游戏开发报错:'Group'对象无'_check_edges'属性求解
问题修复:AttributeError: 'Group' object has no attribute '_check_edges'
错误根源
你在KnockOffShooter类的_scarfy_edge方法里,错误地调用了精灵组self.scarfys的_check_edges方法——但这个方法是定义在单个Scarfy敌人实例里的,精灵组本身没有这个方法。另外,Scarfy类的_check_edges方法还有两处bug:
- 重新赋值
self.rect会覆盖敌人当前的位置信息 - 使用了未定义的
screen_rect变量
分步修复
1. 修正_scarfy_edge方法
把调用精灵组的方法改成调用单个敌人实例的方法,同时补上_respond方法的调用括号(之前只写了方法名没执行):
def _scarfy_edge(self): for scarfy in self.scarfys.sprites(): if scarfy._check_edges(): self._respond() break
2. 修正Scarfy类的_check_edges方法
移除重置self.rect的无效代码,用self.screen.get_rect()获取屏幕边界:
def _check_edges(self): screen_rect = self.screen.get_rect() if self.rect.right >= screen_rect.right or self.rect.left <= 0: return True
3. 修复_update_scarfys方法
原方法里的self.update()是错误的,应该调用精灵组的update方法,让每个敌人执行自己的移动逻辑:
def _update_scarfys(self): self._scarfy_edge() self.scarfys.update()
4. 其他细节修复
runGame里清理子弹的代码在死循环外面,永远不会执行,要移到循环内部:
def runGame(self): while True: self._check_events() self._maintain_screen() self.kirby.update() self.bullets.update() self._update_scarfys() # 移除超出屏幕的子弹 for bullet in self.bullets.copy(): if bullet.rect.bottom <= 0: self.bullets.remove(bullet) print(len(self.bullets))
- 删掉
_fire_bullet里多余的bulletCount = bulletCount - 1,不需要手动减计数 - 删掉
_check_keydown_events里的self.bullets.shoot = True,精灵组没有shoot属性
内容的提问来源于stack exchange,提问作者user19894190
相关产品推荐
相关产品推荐

