Pygame列表中blit的图像消失无法留屏,如何实现全屏随机绘制图像
Pygame图像不保留问题修复方案
核心错误原因
- 重复创建了两个显示窗口
screen和win,代码中向screen绘制图像,却每次循环都清空win窗口,绘制内容和清空对象不匹配导致图像无法留存 drawdog函数逻辑错误:遍历doglist的变量为dog,但实际绘制时调用的是临时全局变量new_dog,导致所有绘制都复用了最后一次新增的狗狗坐标,无法正常绘制列表中所有存储的位置- BLOT事件中重复加载
dog.png属于冗余操作,仅需在初始化阶段加载一次即可 - 定时器触发间隔和
clock.tick设置冲突,会导致狗狗生成频率不符合预期
修复后完整代码
import pygame import random pygame.init() # 仅保留一个显示窗口 win = pygame.display.set_mode((500, 600)) pygame.display.set_caption("DOGGO GAME") # 初始化仅加载一次图像 dogimg = pygame.image.load('dog.png') clock = pygame.time.Clock() doglist = [] BLOT = pygame.USEREVENT # 每500毫秒生成一个新狗狗 pygame.time.set_timer(BLOT, 500) def drawdog(doglist): # 遍历列表中所有存储的rect,逐个绘制 for dog in doglist: win.blit(dogimg, dog) run = True while run: # 每次清空同一个窗口 win.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if event.type == BLOT: dogranx = random.randint(50,200) dograny = random.randint(50,450) new_dog = dogimg.get_rect(midtop=(dogranx, dograny)) doglist.append(new_dog) drawdog(doglist) pygame.display.update() # 帧率设置为60保证运行流畅 clock.tick(60) pygame.quit()
内容的提问来源于stack exchange,提问作者ranranran001
相关产品推荐
相关产品推荐

