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

pygame报错AttributeError: 'pygame.Surface'无bullet_width属性如何解决

问题根因

报错AttributeError: 'pygame.Surface' object has no attribute 'bullet_width'的核心原因是函数参数传递顺序不匹配:本该接收Settings类实例的形参,实际接收到了pygame.Surface类型的屏幕对象,所以调用bullet_width属性时报错。

具体错误点及修复方案

1. 修正check_events函数参数顺序

主模块alien_invasion.py调用gf.check_events时的传参顺序是(ai_settings, ship, screen, bullets),但game_functions.py中check_events的定义参数顺序不匹配,修改如下:

# game_functions.py 修改前
def check_events(ship, ai_settings, screen, bullets):
# game_functions.py 修改后
def check_events(ai_settings, ship, screen, bullets):

2. 修正check_keydown_events的参数顺序与调用逻辑

check_events内部调用check_keydown_events的传参,和check_keydown_events的定义参数顺序不匹配,统一调整:

# game_functions.py 修改前
def check_keydown_events(event, ship, screen, ai_settings, bullets):
# game_functions.py 修改后
def check_keydown_events(event, ai_settings, ship, screen, bullets):

同时修改check_events中调用check_keydown_events的传参顺序:

# game_functions.py check_events 内部修改前
check_keydown_events(event, ship, ai_settings, screen, bullets)
# 修改后
check_keydown_events(event, ai_settings, ship, screen, bullets)

3. 修正Bullet实例化的传参顺序

Bullet类的__init__方法定义参数顺序是(ai_settings, ship, screen),但实例化时传参顺序颠倒,修改如下:

# game_functions.py check_keydown_events 内部修改前
new_bullet = Bullet(ai_settings, screen, ship)
# 修改后
new_bullet = Bullet(ai_settings, ship, screen)

4. 额外修复:调整画面渲染顺序(避免子弹被背景覆盖)

update_screen函数当前先绘制子弹再填充背景,会导致子弹被背景挡住,调整顺序:

# game_functions.py 修改前
def update_screen(ai_settings, screen, ship, bullets):  
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    screen.fill(ai_settings.bg_color)
    ship.blitme()
    pygame.display.flip()

# 修改后
def update_screen(ai_settings, screen, ship, bullets):  
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    pygame.display.flip()

内容的提问来源于stack exchange,提问作者kepsk1y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:24:03