如何blit包含随机x、y坐标与对应图像的particles列表
代码问题与修复方案
你代码里存在4个核心错误导致blit操作失败,逐一修正如下:
- 变量名拼写错误:你定义了粒子总数变量
part = 30,但循环里写的是range(parta),parta属于未定义变量,会直接触发运行报错 - 随机图片逻辑错误:
rand_image = random.choice(particle)写在循环外部,会导致所有30个粒子复用同一张随机选中的图片,不会实现每个粒子随机选图的效果 - 存储的图片对象错误:你现在
particle列表里存的是图片名字符串,不是pygame可识别的Surface图像对象,blit无法渲染字符串 - blit传参格式错误:pygame的
blit方法要求传入两个参数,第一个是待渲染的Surface对象,第二个是坐标值,你直接把包含x、y、图片的三元组传给blit,参数格式完全不匹配
修正后的参考代码:
import pygame import random # 初始化pygame等前置操作省略,w、h、win是你已定义的窗口宽、窗口高、窗口对象 # 先把图片加载为pygame Surface对象,不要存字符串 particle_img = [ pygame.image.load('image1.png').convert_alpha(), pygame.image.load('image2.png').convert_alpha(), pygame.image.load('image3.png').convert_alpha() ] part = 30 particles = [] for i in range(part): # 每次循环随机选一张图 rand_image = random.choice(particle_img) x = random.randrange(w-100, w-10) y = random.randrange(10, h-10) particles.append( (rand_image, (x, y)) ) # 渲染时按blit要求传参 for item in particles: win.blit(item[0], item[1]) # 最后必须调用刷新方法才能把渲染内容显示到屏幕上 pygame.display.update()
额外注意:如果执行完blit操作后没有调用
pygame.display.update()刷新帧缓冲,也会出现看不到渲染结果的问题,必须确保渲染逻辑末尾加了刷新方法。
内容的提问来源于stack exchange,提问作者Tomoe
相关产品推荐
相关产品推荐

