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

在pygame中导入.tmx文件时反复出现ElementTree和pytmx报错

问题排查与修复方案

报错根因

你的报错本质是pytmx成功读取.tmx文件后,找不到TMX内部引用的瓦片集图片资源,不是找不到.tmx文件本身,错误触发在pygame.image.load加载瓦片图片的步骤。

常见出错点

  • TMX文件内的瓦片集路径是相对路径,该路径是相对于你在Tiled中保存TMX文件的位置,而非Python脚本的运行路径。如果移动过TMX文件、瓦片图文件或者修改过文件夹名称,就会导致路径拼接错误。
  • 你代码中存在两处逻辑错误:一是重复加载TMX文件,第12行加载当前运行目录下的Testmap.tmx,第36行又加载Jodo\maps\map.tmx,首先确认你实际要用的TMX文件存放位置和代码路径一致;二是Windows下路径的反斜杠可能触发转义,建议用原始字符串或者正斜杠写路径。
  • 事件循环没有正确的退出逻辑,你定义了run = False但没有作为循环判断条件,会导致点关闭按钮无法正常退出程序,且绘制逻辑没有写在循环内,只会在启动时绘制一次。

修复步骤

  1. 先统一项目目录结构,避免路径混乱,参考结构如下:
项目根目录(main.py存放位置)
├─ main.py
└─ assets
   ├─ maps
   │  └─ Testmap.tmx
   └─ tiles
      └─ 你的瓦片集图片.png
  1. 打开Tiled重新将你的地图保存到上述assets/maps/路径下,Tiled会自动更新瓦片集的相对路径为相对于TMX文件的路径,保证路径有效性。
  2. 修改代码中的TMX加载逻辑,用绝对路径避免运行路径变化导致的错误:
import os
# 先获取当前脚本的绝对根目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
tmx_path = os.path.join(BASE_DIR, "assets", "maps", "Testmap.tmx")
# 加载TMX,pytmx会自动基于TMX所在目录拼接瓦片图片路径
game_map = load_pygame(tmx_path, alpha=True)
  1. 删除代码第36行多余的tmxdata = load_pygame('Jodo\maps\map.tmx')逻辑,不需要重复加载地图。
  2. 修正事件循环和绘制逻辑:
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    # 每帧重绘画面
    screen.fill(background)
    i = 0
    for y in range(50):
        for x in range(50):
            screen.blit(images[i],(x * 32, y * 32))
            i += 1
    pygame.display.update()
pygame.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:36:00