Tiled 实操教程:3 步做出首张带碰撞、可导出的地图

发布时间:2026/11/4 11:59:40
Tiled 实操教程:3 步做出首张带碰撞、可导出的地图

Tiled 实操教程:3 步做出首张带碰撞、可导出的地图

【免费下载链接】tiledFlexible level editor项目地址: https://gitcode.com/gh_mirrors/ti/tiled

不到 1 小时,你会得到一张 40×30 格、带 3 组平台碰撞框和 5 个出生点的 Tiled 地图 map_01.tmx,直接导出 CSV 就能被引擎读。Tiled 是瓦片地图编辑器,把画瓦片、标注对象、画碰撞框收进同一个 TMX 文件。

开工前 3 分钟:备好环境、素材和地图参数

环境:

  • 装好 Tiled 1.12.2,CSV、JSON 等导出插件已内置,无需另装
  • 存档目录留出至少 10MB 空闲空间,地图和瓦片集放在同一文件夹

素材:

  • 一张至少 512×512 像素的 tile sheet PNG,格子全是 32×32,16×16 网格至少 20 个可用瓦片
  • 一张 32×32 透明背景的敌人瓦片 PNG,留给对象层和模板用

参数:

  • Tile Width 32、Tile Height 32、Tile Spacing 0、Margin 0
  • Map Width 40、Map Height 30、Orientation 选 Orthogonal

三拍出图:新建地图、挂瓦片集、导出格式逐项填

新建地图参数怎么填

  1. 先打开 File 菜单,选 New,再选 New Map,会弹出一个对话框。
  2. 接着把 Tile Width 和 Tile Height 都填 32,Map Width 填 40、Map Height 填 30,Orientation 保持 Orthogonal,点 OK。
  3. 这时左侧多出一个新标签页,中间画布是 40×30 的网格,Layers 面板里已有一条默认的 Tile Layer。

瓦片集怎么建、刷子怎么画

  1. 先打开 File 菜单,选 New,再选 New Tileset,在文件框里选中你的 512×512 图集,Tile Size 保持 32×32、Tile Spacing 保持 0。
  2. 接着回到地图标签页,在画布上右键,选 Add Tileset,勾选刚建的瓦片集,右侧 Tileset 面板会出现 16×16 的网格预览,点哪块就选中哪块。
  3. 这时切到工具栏的 Stamp 工具,左键落子、右键擦除,刷子会记住上一次选中的瓦片,换格子也能连续画。

导出格式怎么选、文件长什么样

  1. 先打开 File 菜单,选 Export,格式下拉框里挑 CSV,文件名填 map_01.csv。
  2. 接着用文本编辑器打开生成的 CSV,开头几行是以 # 开头的注释,记录着宽、高、朝向、瓦片尺寸:
# Tiled map file width:40 height:30
  1. 这时往下是 30 行纯数字,每个数字是一块瓦片的 GID,引擎按表格读取即可。

五个功能各答四问:碰撞框、对象层、模板、地形刷、导出

碰撞框怎么画在瓦片上

  • 解决什么:平台砖只画一次矩形,地图上所有同款平台自动继承,不用逐格画。
  • 在哪个面板:瓦片集编辑器里选中一块瓦片,点工具栏的 Tile Collision Editor 按钮,在 Collision 选项卡里画矩形,一块瓦片可挂多个框。
  • 对应文件:碰撞编辑器实现
  • 什么时候别用:只在地图某处出现一次、或尺寸独一无二的形状,画在对象层更合适。

出生点这类数据放哪个层

  • 解决什么:承载出生点、门、摄像机、道具坐标这些与像素无关的数据。
  • 在哪个面板:Layer 菜单,Add Object Layer;用工具栏的对象工具画矩形或点,再在属性区填 name 和 type。
  • 对应文件:对象层数据结构
  • 什么时候别用:对象层不渲染瓦片,可见的场景地面、墙面仍应画在瓦片层。

同一组合对象怎么复用

  • 解决什么:"敌人 + 判定框"这种固定组合要摆 4 处时,建一次、用多次。
  • 在哪个面板:对象层里选中组合,右键 Create Template 生成 .tx 文件;之后在 Templates 面板选中模板拖进地图即可实例化。
  • 对应文件:模板数据结构
  • 什么时候别用:每个实例外观差异很大时,模板反而添乱,直接单独放置。

地形刷怎么自动补过渡瓦片

  • 解决什么:草地与泥土的过渡瓦片原本要逐格挑选,地形刷按周围 4 格或 8 格自动补上过渡。
  • 在哪个面板:瓦片集编辑器切到 Terrain 选项卡,把过渡瓦片编进一个 terrain set;再在工具栏选 Terrain Brush 工具刷地。
  • 对应文件:地形数据结构
  • 什么时候别用:瓦片集里没有现成过渡瓦片时,刷子变不出来,要么补图,要么改用自动映射。

导出格式怎么挑

  • 解决什么:不同引擎读不同格式,Tiled 自带 CSV、JSON、TSCN、GMX 等导出插件。
  • 在哪个面板:File 菜单,Export;下拉框列出全部已装插件格式,选一个填文件名。
  • 对应文件:CSV 插件源码
  • 什么时候别用:目标引擎的格式不在列表里就别硬套,让引擎直接读 TMX 或 JSON,或用插件扩展。

横版平台工作流:模板、对象层、碰撞框一条线串完

场景换成你一个人在做的横版游戏。关卡就是前面那张 40×30、32×32 的地图,下面按时间线走三件事。

先做敌人模板。史莱姆要在图上出现 4 处,就在对象层画一个 32×32 的矩形、命名为 slime,右键它选 Create Template,生成一个 .tx 文件,里面就是一行对象描述,仓库示例模板的格式是这样的:

<object name="hero" type="hero" gid="22" width="128" height="160"/>

接着在 Templates 面板把模板拖进地图 4 个位置,4 个实例共用同一份数据,之后改模板会同步到每一处。

再处理碰撞。打开瓦片集编辑器,在 Tile Collision Editor 里给平台砖画一个 32×32 矩形,底边留 2 像素空隙,角色脚下才不会穿模。回到地图,打开 View 菜单,选 Show Tile Collision Shapes,屏幕上每个平台都浮出轮廓,漏画的立刻能找出来。

最后补齐数据。对象层再加一个名为 player_start 的点和一个名为 exit 的矩形,File 菜单,Export,选 JSON 存成 map_01.json,引擎从瓦片对象组读碰撞、从对象层读坐标。

交付前自检:

  • 开着 Show Tile Collision Shapes,确认没有平台漏掉碰撞框
  • 地图标签页标题没有未保存标记
  • 打开导出的 JSON,确认地图尺寸仍是 40×30

按症状排查:4 个导出与地形常见问题的处理

  • 导出的地图错位、缺瓦片:先打开瓦片集编辑器的属性区,把 Tile Width、Tile Height、Spacing、Margin 四个字段和 PNG 实际像素逐一对一遍。数字对不上就改字段贴合图片,字段没错则是图集切错,重新裁图。
  • 老地图打开后地形过渡全没了:先确认这张地图是不是 1.5 之前的版本写的。1.5 起地形存储格式统一过,旧版本读不了新文件。团队统一升到 1.12,升级后旧文件的地形要重刷一遍。
  • 无限地图导出不全:先看 Layers 面板里各层显示的是否为已编辑区域尺寸,确认地图是不是 Infinite。无限地图没有固定宽高,部分插件只写已编辑部分。改回固定尺寸地图;实在离不开无限,参考官方无限地图说明。
  • 想逐像素重画每个精灵:这类需求不适合 Tiled,它的定位是拼装瓦片,不是像素创作。用 Aseprite 完成原画,把画好的 PNG 带进 Tiled 铺瓦片,各干各的。

下一步建议:从示例地图继续上手

  • 再建一张只靠对象层画碰撞的地图,体会按瓦片碰撞与按对象碰撞的差别
  • 逛一下 examples/sewer_automap/ 里的 9 套自动映射规则,挑一条抄到自己的瓦片集上试
  • 在引擎代码里读一次导出的 CSV 或 JSON,打印任意一块瓦片的 GID 验证链路
  • 示例地图:带模板与对象层的完整地图,含模板实例和对象层,直接打开对照 ⛏

【免费下载链接】tiledFlexible level editor项目地址: https://gitcode.com/gh_mirrors/ti/tiled

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考