pygame.draw.rect运行异常仅绘制部分精灵,5行雨网格只显示第一行求助
问题排查与解决方案
1. 行间距过大导致后续行超出屏幕范围
你当前行间距设置为3 * rain_drop_height,如果单个雨滴高度偏大,5行的总高度很容易超出屏幕高度,导致后面的行直接在可视区域外无法显示。
排查方式:在绘制雨滴的循环中添加打印,确认坐标是否在屏幕范围内:
for rain_drop in self.rain.sprites(): # 新增打印确认坐标合法性 print(f"绘制雨滴坐标:x={rain_drop.rect.x}, y={rain_drop.rect.y}, 屏幕高度={self.settings.screen_height}") rain_drop.draw_rain()
如果打印的y值大于屏幕高度,直接修改_create_rain方法里的行间距系数即可,比如将3 * rain_drop_height改为1 * rain_drop_height缩小间距。
2. Rain类的draw_rain方法写死了y坐标
这是最常见的出错点,很多人写绘制逻辑时会不小心固定y坐标为第一行的位置,导致所有雨滴都叠在第一行:
错误的draw_rain写法示例:
def draw_rain(self): # 错误:y坐标写死为固定值,所有雨滴都会绘制到第一行 pygame.draw.rect(self.screen, self.color, (self.rect.x, 20, self.width, self.height))
正确写法直接传入完整rect对象即可:
def draw_rain(self): pygame.draw.rect(self.screen, self.color, self.rect)
3. 其他逻辑误清理了非第一行的雨滴
排查代码中是否有调用self.rain.empty()、精灵kill()方法的逻辑,确认没有在创建完5行雨滴后,误删除了后面4行的精灵实例。
内容的提问来源于stack exchange,提问作者lucas fonseca
相关产品推荐
相关产品推荐

