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

pygame draw方法添加surface位置参数的正确方式及报错处理

错误原因

  1. star.py 中错误赋值了精灵组的draw方法:pygame.sprite.Group.draw 是精灵组的类方法,调用时需要第一个参数传入精灵组实例本身,你把它直接赋值给单个Star实例的draw属性,调用时缺少必填的组实例参数,所以触发报错。
  2. stars.py 的屏幕绘制逻辑错误:你已经通过_create_stars方法把所有生成的星星实例存入了self.stars精灵组,精灵组自带draw方法可批量绘制组内所有精灵,不需要额外调用单个star的draw方法。

修复步骤

1. 修改star.py代码

删除Star类__init__方法最后一行多余的赋值代码:

# 删掉这行
self.draw = pygame.sprite.Group.draw

单个精灵不需要自定义draw方法,精灵组会自动读取精灵的image和rect属性完成绘制。

2. 修改stars.py的_update_screen方法

将原来调用单个star绘制的代码,替换为调用精灵组的draw方法:

def _update_screen(self):
    """更新屏幕上的图像,并切换到新屏幕"""
    # 每次循环重绘背景
    self.screen.fill(self.settings.bg_color)
    # 绘制精灵组内所有星星
    self.stars.draw(self.screen)
    # 刷新显示最新绘制的屏幕
    pygame.display.flip()

(可选优化)Stars类__init__方法中的self.star = Star(self)是多余的未使用实例,可以直接删除。

修改完成后运行程序即可正常显示满屏星星网格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:15:03