Pygame开发中能否统一调整列表内所有精灵图像的缩放比例?
解决方案
完全可以实现列表内图像的统一缩放,你已经掌握的rotozoom方法可以直接复用,通过遍历列表处理每一张帧即可,用列表推导式可以快速完成批量操作。
现有代码适配方案
不需要修改你现有的加载逻辑,在加载完成后添加两行代码即可完成批量缩放:
# 缩放系数和你之前缩放静止角色的参数保持一致 SCALE = 2 # 批量缩放向右、向左走的所有动画帧 walkRight = [pygame.transform.rotozoom(frame, 0, SCALE) for frame in walkRight] walkLeft = [pygame.transform.rotozoom(frame, 0, SCALE) for frame in walkLeft]
优化加载方案
你当前的代码重复加载了两次行走动画素材,其实可以加载一次向右的帧后,通过水平翻转得到向左的帧,既简化代码又减少磁盘IO开销:
SCALE = 2 # 批量加载+缩放向右行走的动画帧 walkRight = [] for frame_idx in range(1, 9): img = pygame.image.load(f"./gubbe/Run/Warrior_Run_{frame_idx}.png") # 加载后直接缩放再存入列表 walkRight.append(pygame.transform.rotozoom(img, 0, SCALE)) # 水平翻转向右的帧得到向左的帧:flip方法第二个参数为True代表水平翻转,第三个为False代表不垂直翻转 walkLeft = [pygame.transform.flip(frame, True, False) for frame in walkRight] bg = pygame.image.load("./gubbe/bg1.png") char = pygame.transform.rotozoom(pygame.image.load("./gubbe/idle/Warrior_Idle_1.png"), 0, SCALE)
注意事项
pygame.transform类的所有变换方法都不会修改原图像对象,只会返回变换后的新Surface对象,所以必须把变换后的结果重新赋值给原变量/列表元素,修改才会生效。
内容的提问来源于stack exchange,提问作者Tim Berghman
相关产品推荐
相关产品推荐

