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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:01