使用pytmx加载Tiled生成的TMX文件报错:无法找到tileset文件
Pygame中使用pytmx加载Tiled地图时找不到tileset文件
我在Tiled编辑器中制作了一张地图,计划在Pygame开发的游戏中使用。引入pytmx库辅助加载地图,但调用load_pygame()方法加载指定路径的TMX文件时抛出异常,报错显示找不到tileset文件。
报错信息
Traceback (most recent call last): File "D:\Coder man\code\GUI\game map\showing map.py", line 7, in <module> tmx_data = load_pygame("D:\Tile sheet\Dungeon Hub room.tmx") File "C:\Users\Name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pytmx\util_pygame.py", line 183, in load_pygame return pytmx.TiledMap(filename, *args, **kwargs) File "C:\Users\Name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pytmx\pytmx.py", line 501, in __init__ self.parse_xml(ElementTree.parse(self.filename).getroot()) File "C:\Users\Name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pytmx\pytmx.py", line 550, in parse_xml self.add_tileset(TiledTileset(self, subnode)) File "C:\Users\Name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pytmx\pytmx.py", line 1101, in __init__ self.parse_xml(node) File "C:\Users\Name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pytmx\pytmx.py", line 1129, in parse_xml source, self.parent.filename, path Exception: Cannot find tileset file :/automap-tiles.tsx from D:\Tile sheet\Dungeon Hub room.tmx, should be at D:\Tile sheet\:\automap-tiles.tsx
当前代码
import pygame, sys from pytmx.util_pygame import load_pygame pygame.init() screen = pygame.display.set_mode((1280, 720)) tmx_data = load_pygame("D:\Tile sheet\Dungeon Hub room.tmx") print(tmx_data) # game loop while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill("black") pygame.display.update()
预期结果与已尝试操作
预期程序无报错,输出<Tiledmap: "Tile sheet\Dungeon Hub room.tmx">并弹出Pygame窗口。已核对文件路径、检查load_pygame调用方式,问题仍未解决。
解决方案
1. 修正TMX文件中的tileset路径格式
报错里的:/automap-tiles.tsx是错误的路径格式,这是Tiled保存地图时生成的异常路径。用文本编辑器打开你的Dungeon Hub room.tmx文件,找到引用tileset的XML节点:
<tileset firstgid="1" source=":/automap-tiles.tsx"/>
将source属性修改为正确的相对路径:
- 如果
automap-tiles.tsx和TMX文件在同一文件夹,改为source="automap-tiles.tsx" - 如果tileset在子文件夹(比如
tilesets),改为source="tilesets/automap-tiles.tsx"(统一使用正斜杠/)
2. 修复Python路径字符串的转义问题
代码中的路径字符串"D:\Tile sheet\Dungeon Hub room.tmx"存在转义风险,\T、\D可能被Python解析为转义字符。可以用三种方式修改:
- 使用原始字符串:
r"D:\Tile sheet\Dungeon Hub room.tmx" - 双反斜杠转义:
"D:\\Tile sheet\\Dungeon Hub room.tmx" - 正斜杠替代:
"D:/Tile sheet/Dungeon Hub room.tmx"
修改后的代码路径部分示例:
tmx_data = load_pygame(r"D:\Tile sheet\Dungeon Hub room.tmx")
3. 验证tileset文件的存在性
确认automap-tiles.tsx文件确实存在于你指定的路径下,文件名和大小写完全匹配(建议保持与TMX中引用的一致)。
内容的提问来源于stack exchange,提问作者Ninja Boy James
相关产品推荐
相关产品推荐

