跳到主要内容

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图形渲染库
  • 右键点击可以刷新地图迷宫,左键点击任意可行走的坐标,会自动进行移动演示