Pygame中Sprite Group绘制报错:Source objects must be a surface 求助
Pygame绘制Sprite Group报错“Source objects must be a surface”修复方案
问题场景
开发2D平台游戏时,绘制coins精灵组到显示表面时触发TypeError,报错提示:Source objects must be a surface。
问题原因
错误出在import_folder函数的实现逻辑:函数内虽然通过pygame.image.load()加载了图片得到Surface对象image_surf,但最终添加到surface_list的却是文件名字符串image,而非实际的Surface对象。当AnimatedTile类将这些字符串赋值给self.image后,Pygame尝试绘制时自然会抛出类型错误——因为它需要的是Surface而非字符串。
修复代码
修改import_folder函数,将加载后的Surface对象加入列表:
import os from os import walk import pygame def import_folder(path): surface_list = [] for _,__, image_files in walk(path): # 可选:对文件名排序,保证动画帧顺序正确 image_files.sort() for image in image_files: full_path = os.path.join(path, image) image_surf = pygame.image.load(full_path).convert_alpha() surface_list.append(image_surf) # 替换原有的append(image) return surface_list
额外优化提示
- 使用
os.path.join拼接路径,适配Windows、Linux等不同操作系统的路径分隔符 - 对
image_files排序,确保动画帧按正确顺序播放(比如文件名带数字时,避免出现帧顺序混乱)
内容的提问来源于stack exchange,提问作者Ralph Turner
相关产品推荐
相关产品推荐

