楼主: 余烬之中

[RMVA发布] RGSS3下A星寻路的解说与实现

[复制链接]
梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-8-25 15:02:00 | 显示全部楼层
本帖最后由 myownroc 于 2014-8-25 15:24 编辑

给深度优先加了个启发判断,总觉得少了什么……
点击展开/收起
  1. 伪代码

  2. 获得起始点、终止点;

  3. 设置一个空数组checked,用于存放已经检测过的节点;

  4. 当终止点位于地图外 或 终止点从任何一个方向都不能到达时,返回空;
  5. 否则,继续;

  6. 设置当前节点为起始点;

  7. 循环:
  8.   将当前节点放入checked;
  9.   如果当前节点是终止点,返回真;
  10.   如果当前节点周围(四方向)不存在一个未检测过(checked中不存在)、并且可以到达的节点,则
  11.     如果当前节点是起始点,则
  12.       返回空;
  13.     否则
  14.       回溯到当前节点的父节点;
  15.       跳过本次循环;
  16.     结束判断;
  17.   否则
  18.     获取当前节点的子节点;
  19.     计算各个子节点的F值;
  20.     如果存在一个未检测的子节点,则
  21.       选择F值最小、且未检测过的子节点:
  22.         设置该点的父节点为当前节点;
  23.         设置该点为当前节点;
  24.       结束选择;
  25.     否则
  26.       设置当前节点为当前节点的父节点;
  27.       跳过本次循环;
  28.     结束判断;
  29.   结束判断;
  30. 回到循环;
复制代码

点评

绕路实在不能看!  发表于 2014-8-25 15:26
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
55
在线时间
218 小时
注册时间
2013-12-17
回帖
368
发表于 2014-11-27 11:58:18 | 显示全部楼层
感谢大大分享,正在寻找这方面的资源。
没想到余烬大大直接拿出成品来分享了。
省了不少劲。
RM脚本定制/修改/整合 群:143356012(入群注明来意)
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-9-4 20:31:28 | 显示全部楼层
本帖最后由 喵呜喵5 于 2015-9-4 22:46 编辑

时隔许久过来说一个BUG

RGSS3中图块有一个叫通行方向的混帐玩意儿,这个通行方向呢……无比操蛋的居然能够把某个行走图设置成从某个方向走过去时不可通行

于是,类似下面这样的情况下,目前代码中从终点逆向回到起点的寻路方式就吃瘪了

新建图像.png


=================

仔细想想好像也不对,因为自己写的A*脚本没有遇到这个问题能够正常寻路,但是你的脚本却不行……让我想想到底是哪里不对…………

=================

虽然说不清楚,但是感觉差不多明白你的脚本寻路算法为什么用问题了,我这边是直接用要寻路的事件本身的检查能否通行方法进行判断的,这个方法里面会自动检查某个特定图块的某方向是否都能够双向正常通行来保证不会钻进封闭的图块中,而你定义的检查通行的方法只检查了其中一个方向,因此出错了,附带一张测试图片:

地图上那个梯子图块是个下方向无法通行的图块
你的A*
1.PNG
我的A*
2.PNG




评分

参与人数 1星屑 +166 收起 理由
余烬之中 + 166 我很赞同

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部