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
相关产品推荐
相关产品推荐

