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

如何用for循环批量缩放Pygame中的多张图像?

问题原因与解决方案

你的循环写法之所以不生效,核心原因是:循环变量i只是临时保存了self.quieto、self.andando的引用,当你执行i = pygame.transform.scale(...)时,只是把i指向了新生成的缩放后图像对象,但并没有更新self对应的属性引用。原来的self.quieto和self.andando仍然指向未缩放的原始图像,自然看不到效果。

以下是两种简洁的解决方式,适合后续扩展更多状态:

方式1:遍历属性名称,动态修改self的属性

直接通过属性名来获取和设置self的属性,这样能直接更新目标属性的引用:

def __init__(self):    
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load("Migue/m_normal.png")

    # 先加载原始图像
    self.quieto = pygame.image.load("Migue/m_normal.png")
    self.andando = pygame.image.load("Migue/m_andando_normal.png")
    self.image = pygame.transform.scale(self.image, sizenorm)
 
    # 定义需要缩放的状态属性名称列表
    state_attrs = ["quieto", "andando"]
    for attr_name in state_attrs:
        # 获取当前属性的原始图像
        original_img = getattr(self, attr_name)
        # 缩放后重新赋值给对应的属性
        setattr(self, attr_name, pygame.transform.scale(original_img, sizenorm))

后续新增状态时,只需要在state_attrs列表里添加新的属性名即可。

方式2:用字典统一管理状态图像

把所有状态图像放到一个字典里,后续维护和遍历都更方便:

def __init__(self):    
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load("Migue/m_normal.png")
    self.image = pygame.transform.scale(self.image, sizenorm)
 
    # 用字典存储所有状态图像
    self.states = {
        "quieto": pygame.image.load("Migue/m_normal.png"),
        "andando": pygame.image.load("Migue/m_andando_normal.png")
        # 后续新增状态直接在这里加键值对
    }

    # 遍历字典缩放所有图像
    for state_name in self.states:
        self.states[state_name] = pygame.transform.scale(self.states[state_name], sizenorm)

使用时直接通过self.states["quieto"]来调用对应状态的图像即可。

内容的提问来源于stack exchange,提问作者Fire Frekox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:55