pygame draw方法添加surface位置参数的正确方式及报错处理
错误原因
star.py中错误赋值了精灵组的draw方法:pygame.sprite.Group.draw是精灵组的类方法,调用时需要第一个参数传入精灵组实例本身,你把它直接赋值给单个Star实例的draw属性,调用时缺少必填的组实例参数,所以触发报错。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
相关产品推荐
相关产品推荐

