You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:18:34