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

Phaser游戏中加载Tiled TileMap报错求助

解决Phaser加载Tiled TileMap时的TypeError问题

你遇到的Cannot read properties of undefined (reading '2')错误,本质是Phaser解析Tiled导出的JSON地图时,找不到对应tileset的tile属性数据,以下是针对性的解决步骤:

1. 严格匹配Tiled tileset名称

打开你的Tiled工程,查看tileset的内部名称(不是自定义显示名称),确保addTilesetImage的第一个参数和Tiled里的名称完全一致——包括空格、大小写,一点都不能错。比如如果Tiled里你的tileset叫MasterSimple,就把代码里的"Level 1"替换成这个名称。

2. 检查Tiled导出设置

导出JSON地图时必须做这两个设置:

  • 勾选「Embed Tilesets」(嵌入tileset),避免外部引用导致Phaser无法读取完整的tileset数据;
  • 确认地图的tile宽高和tileset的tile尺寸完全一致,Phaser对尺寸匹配要求严格。

3. 修正Phaser解析代码

当前代码只加载了tileset但没创建图层,先确保解析阶段正确,再补充图层创建逻辑,修改后的create方法示例:

create() {
  const level1Map = this.make.tilemap({ key: "level1Map" });
  // 替换成你Tiled中实际的tileset名称
  const tileset = level1Map.addTilesetImage("你的Tiled tileset名称", "tiles");
  // 创建图层(替换成你Tiled中实际的图层名称,比如"Ground")
  const groundLayer = level1Map.createLayer("Ground", tileset, 0, 0);
}

4. 验证资源加载状态

虽然你说资源已加载,还是可以加个回调确认:

preload() {
  this.load.tilemapTiledJSON("level1Map", "../../assets/level1.json");
  this.load.image("tiles", "../../assets/MasterSimple.png");
  
  this.load.on("complete", () => {
    console.log("tilemap缓存状态:", this.cache.tilemap.has("level1Map"));
    console.log("tileset图片缓存状态:", this.cache.image.has("tiles"));
  });
}

如果输出都是true,说明资源加载没问题,重点排查前两步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:19