Phaser加载Tiled导出Tilemap仅显示黑屏,求技术排查解决
以下是针对你遇到的问题的具体排查和解决步骤:
检查Tiled图层可见性
打开Tiled编辑器,确认所有需要显示的图层都勾选了「可见」选项。导出JSON时,隐藏的图层会被标记为visible: false,Phaser不会渲染这类图层。重新导出时要确保目标图层处于可见状态。验证Tileset路径匹配
确认Tiled导出的JSON中,tileset的image字段路径与Phaser加载路径一致。比如你将tilesheet放在public/assets/tilesheet.png,JSON中image字段应设为tilesheet.png(或相对路径assets/tilesheet.png,根据项目结构调整)。Phaser加载代码需对应:this.load.image('tiles', 'assets/tilesheet.png');添加tileset时要确保Tiled中设置的tileset名称与
addTilesetImage的第一个参数完全匹配。确认相机与地图尺寸对齐
打印map.widthInPixels和map.heightInPixels,确认地图实际尺寸不为0。然后设置相机边界并定位到地图可视区域:this.cameras.main.setBounds(0, 0, map.widthInPixels, map.heightInPixels); // 直接将相机移动到地图中心 this.cameras.main.centerOn(map.widthInPixels / 2, map.heightInPixels / 2);检查图层渲染配置
确保正确创建并添加图层到场景,同时设置合理的层级:const tileset = map.addTilesetImage('你的tileset名称', 'tiles'); const groundLayer = map.createLayer('你的图层名称', tileset, 0, 0); // 确保图层处于可见层级 groundLayer.setDepth(0);注意对象层不会自动渲染tiles,需手动处理对象的显示逻辑。
核对Phaser版本兼容性
克隆的示例仓库可能使用特定版本的Phaser,与你本地项目版本不兼容导致API失效。查看示例仓库的package.json中的Phaser版本,安装对应版本测试:npm install phaser@对应版本号检查画布与缩放设置
确认游戏配置的画布尺寸能容纳地图,或开启自适应缩放:const config = { type: Phaser.AUTO, width: 800, height: 600, scale: { mode: Phaser.Scale.FIT, autoCenter: Phaser.Scale.CENTER_BOTH }, scene: { preload: preload, create: create } };也可尝试缩小相机缩放比例,排查是否地图超出画布范围:
this.cameras.main.setZoom(0.5);验证Tilesheet格式
确保tilesheet的宽高是单个tile尺寸的整数倍(比如tile为16x16,tilesheet宽度应为16的倍数)。Tiled中设置的tile大小需与实际tilesheet的tile尺寸一致,避免渲染偏移或不显示。
内容的提问来源于stack exchange,提问作者Chris

