之前在学习数据结构与算法 - AStar(A*)等寻路算法的过程中提到过网格地图时由类似0是可移动节点、1是障碍节点
的网格组成的一张地图,这些地图信息是怎样生成出来的呢?
引言
地图编辑器是一种所见即所得的游戏地图制作工具,它辅助设计和输出地图数据,包括创建、编辑、存储和管理游戏地图数据。
如何生成地图数据
只考虑 2D 地图,一般来说有两种方式:
PhotoShop
打开原始地图文件,按照网格大小进行标注类型地图编辑器
2D 游戏有很多成熟的编辑器,比如:tiled editor,但本着“造轮子”的原则就是开发一套啦!
地图编辑器使用什么技术来开发,选择也很多样性。
考虑学习成本问题,这里使用 Cocos Creator + Typescript 来开发一套简易的地图编辑器。
实现步骤
加载贴图文件
根据指定网格大小进行划分网格
可以对网格填充不同的颜色(可行走、不可行走)
导出结果
地图编辑器是游戏开发中最入门的部分,简单粗暴!
加载贴图文件
创建一个用于显示地图的Sprite
节点。
1 | const { ccclass, property } = cc._decorator; |

划分网格
在 Sprite 节点下创建一个绘图子节点Graphics
。
1 | // 绘图节点 |
之后在Graphics
节点进行绘制。
1 | this.mapGraphics.clear(); // 清除所有绘制 |

填充颜色
监听触屏事件TOUCH_START
、TOUCH_MOVE
。
1 | // mouse event |
事件触发,给鼠标所在坐标的网格填充颜色。这里需要注意的小知识点坐标系的转换
,可分为:世界坐标、本地坐标、像素坐标。
1 | const eventPos: cc.Vec2 = event.getLocation(); |

导出结果
导出结果逻辑很简单,需要在填充颜色时记录对应网格的类型,最后输出到文件。
生成 x*y 个网。
1 | // 网格信息 |
记录网格信息。
1 | // 记录格子信息 |
输出到文件
1 | const v: object = { |
最后
附上完整代码:map-editor