一、tiledMap使用
1.创建新地图 各版本下载地址
2.导入图块集,两种选择方式 ①提前打好的图集 ②多图片合集(散图),我们这里是第二种
3.给图块添加碰撞属性
4.添加碰撞图层,在右上角图层的位置鼠标右键–新建–图块层,此处 的meta便是我们的碰撞层,用上一步我们设置好的具有碰撞属性的图块在这个图块层上绘制。
一般项目中这个meta层都会隐藏掉,它只是起到标记的作用,方便直观的看到标记区域
二、A星寻路
A星的简单介绍请看这里:用简单直白的方式讲解A星寻路算法原理
三、两者如何配合使用
① 首先创建一个ANode类来记录tilemap每个格子的数据,比如所在行列、父节点、是否可行走、F/G/H的值等。
② 创建一个Grid的类来管理ANode。
③ 最后创建一个AStart的类,主要是对A星算法的封装,内部需要一个变量 m_grid 引用Grid类,并对外提供 m_grid 网格数据的初始化和寻路的接口。
四、demo展示
点击任何非红色图块,如果有路径返回图块都可以到达,相机也会过跟随移动
图块障碍物判断的核心代码,上述图块 “Collidadle” 属性的使用
// 图块障碍判断
// tileCoord:图块的行列值
private isUseableTile(tileCoord) {
// 从meta图块层上获取这个图块的gid
let tileGid = this.m_metaLayer.getTileGIDAt(tileCoord)
if (!tileGid || tileGid < 0) {
return true;
}
// 拿到这图块上的所有属性
let properties = this.m_map.getPropertiesForGID(tileGid)
if (properties && properties["Collidadle"]) {
return false;
}
else {
return true;
}
}
demo源码:AStar_TiledMap