astar
A星寻路组件
使用方法
-
你需要在你自己的地图对象或者房间对象上component一下寻路组件,component pkg.astar.components.FAStarBase;
-
然后需要初始化一下地图数据,调用该组件中 init_map(array griddata) 方法来初始化地图数据,默认通行是8方向的,可以通过设置修改为4方向寻路
-
griddata的格式是一个以单元格为单位的二维数组,其中0表示可以通行,1表示不能通行,格式例子如下:
[
[0, 0, 0, 0, 1, 1, 0, 1, 0, 1],
[1, 0, 0, 0, 1, 1, 0, 1, 0, 1],
[1, 1, 0, 0, 1, 1, 0, 1, 0, 1],
[1, 1, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 0, 1, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 1, 0, 1],
[0, 0, 0, 0, 1, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 0, 1, 1],
] -
然后就可以随时调用寻路方法 find_path(startx, starty, endx, endy) 来获取一个从起始点到终点的路径了,路径格式是一个二维数组包含起始点和终点,格式例子如下:
[
[0, 0],
[0, 1],
[0, 2]
]
组件接口
函数原型 | 函数作用 |
---|---|
void init_map(array para) | 该接口用来初始化地图通行信息 |
void update_map(array para) | 该接口用来更新地图通行信息 |
array get_map() | 该接口用来获取地图通行信息 |
void set_size(int width, int height) | 该接口用来设置地图的宽高 |
int get_width() | 该接口用来获取地图的宽度 |
int get_height() | 该接口用来获取地图的高度 |
void set_diag_move(bool enable) | 该接口用来设置通行模式,设置方向 true:8方向 false:4方向, 默认是8方向 |
bool get_diag_move() | 该接口用来获取当前通行模式 true:8方向 false:4方向 |
void add_collision(int x, int y) | 该接口可以用来设置障碍物 |
void remove_collision(int x, int y) | 该接口用来移除障碍物 |
void clear_collisions() | 该接口用来清空所有障碍 |
map get_collisions() | 该接口用来获取所有障碍物坐标 |
array find_path(int startx, int starty, int endx, int endy) | 该接口用来进行寻路,获取一个起点到终点的路径 |
示例Demo
- 在astar-demo目录下,运行start.bat启动
- 该demo基于pkg.astar算法,以及pkg.game2d图形渲染库
- 右键点击可以刷新地图迷宫,左键点击任意可行走的坐标,会自动进行移动演示