建议你也写一篇介绍自己的寻路算法的文章,知识互相交流嘛,大家互相进步。
如果摸墙得到的外墙角都看不到起点,该怎么办呢?要反着再来一遍墙角的A*吗?
上面有同学提到的JPS+,把每个跳点对应方向该怎么跳都预处理了,比RCA的摸墙+跳点A*要快,性能测试建议和JPS+比一比。
我写了啊,如果摸到的最近的一个墙角不能直达起点,就把这个墙角连接的周围的外墙角找一个最近的并且能直达玩家起始点的。这个一定存在。
我写的算法的介绍你看都没看,也不知道原理就乱发表观点了。其实我贴子里已经提到如何做测试案例了,有个地图编辑器可以在线测试,你看都不看。
算了,你不爱看文字我就单独再做个测试案例直接给个你吧。里面包含了“RCA寻路”和“A星寻路”,你直接对比一下效率差距有多大。
点开下面的连接,里面有3张地图,其中2张是10000格子以上的,
好好测测能震坏你的认知,原理寻路可以这么玩的。不要啥不懂就大放厥词,当然我也希望你能出一个你的寻路的测试案例发出来,我也想看看原理和效果如何。
给你测试案例,测了再说,里面有a星寻路算法做对比,你自己好好看看效率是不是远远甩开A星。
我上面贴子里都提到地图编辑器里有测试案例可测了,是你没注意看,我现在单独把测试案例提出了给你测试。
JPS寻路我知道,我的RCA寻路和跳点寻路不是同一个东西,跳点寻路里的拐点概念和我的墙角是两回事,跳点寻路还是以8方向寻路的,我的射线没有8方向概念。跳点寻路的缺点是地图越空旷,寻路效率越差。
你自己测一下下面的案例,有寻路过程可以看。
Cocos Creator | RCA_Demo
地图寻路中最复杂的地形是这种,在一个封闭的区域内只有一个出口,要寻路到外面某个终点。
如下截图,蓝色是起始点,黄色是终点,A星寻路和跳点寻路的特性决定了它们必须把封闭区域内的所有的格子都监测完才找到出口,截图里这个封闭空间大概有8000个格子,我不知道你的寻路算法有没有办法从这个空间逃逸出来,而我的RCA寻路只需寻路6步就轻易找到目标点。
你说的一大堆都是扯,这种地形才是判断一种寻路算法是否优秀是试金石。
你这种切割怎么保证寻到的路径是最短的呢,只能大概搜到一个相近路径。
测试案例给你了,你自己看看,我也想看看你的10倍精度的寻路算法的效率。给个测试案例我测一下看看。
看来你连A星是什么都不明白,重新找个教程先把A星学明白了再来学其他的吧。1W格是100 * 100格的原地图,你全篇没有介绍你是怎么减少你的精度问题 和 你的寻路耗时到底是多少毫秒。还有,我不清楚你说的6步是什么意思,一个寻路核心耗时操作就是循环内的指令,你全篇我看下来就一个射线检测,以我的经验,你只是还没遇到能宕机的地图类型,因为你的精度少的可怜。几W格在我这是微秒级别的速度
https://github.com/3264876581/goAstar
我的对角线耗时已经写的很清楚了,至于你说的什么死胡同,让我觉得你是没自己动手写过代码的人。
科普下,μs是微秒

如果你连为什么测对角线都不知道,那我觉得你可以把帖子删了,自己正儿八经重新学寻路,写一个高性能的出来发帖diss我thanks
哦,还有你说的寻到的路径是最短的,你说的F=g+h,我给你科普下,只有当F=g,或者F=h的时候,退化成广度优先或者深度优先,再加后处理排列组合,你才能正真意义上得到全量最短路径。代价你自己清楚。至于你说我的路径不见得最短,我确实承认,我只是全量部分最短,这是贪心算法决定的初始路径,任何人无法改变,但是99%的情况下比意义上全量最短路径多1.05倍到1.2倍,这点在寻路游戏上0感知。至于你的射线检测,你可以划个地图加障碍测下几十W条不同路径看看是不是都是全量最短的。答案是个正常人都能提前预见。
我给你的案例,你看一下精度哪里有问题,我的寻路路径哪里不是最短的了,如果能找请提供给我。
A星寻路的性能跟时间复杂度和空间复杂度有关,你聊了半天所谓精度也没说出个啥,我截图里的那个死胡同几千个格子,如果你寻路需要把所有格子查一边,不管你的精度是什么,该是多少运算消耗就是多少消耗。A星寻路最忌讳的是寻路深度高的问题,深度越高积累的开放列表待处理数据越多,所耗的时间复杂度和空间越高。别动不动搞得你很高深,叫你给一个测试案例,像我给的那样通过动画把整个寻路过程展示出来的案例都没,专搞一些故作高深的精度词语,寻路的目的就是获得期望的最短路径,并且运算效率,而且执行寻路的对象不止一个,一些RTS游戏可能有上百个对象在寻路,特别是moba游戏,你跟别人对战处于残血状态想要逃离,你寻的路径不是最短的,只在毫秒之间被别人追上秒杀。
你连A星寻路中有什么优化手段都不知道,你就说什么RCA,我帮你翻下视频链接吧,省的你说我不权威
我麻烦你搜索下什么叫贪心算法,别纠结你那死胡同了…,你想说A星寻路碰到很刁钻的小口就不行了是吧,1个地图如果全是死胡同堆叠,而我的A星恰好每次都走死胡同就慢了是吧。实际上也就是2倍多对角线的路线查询。你知不知道贪心算法撞到墙会沿着墙边走,哪来的所有格?你到底有没有学过A星
你到底理解了openList的作用没?
你不会是写了个错误的H代价函数吧
return float32(dx + dy - (2-math.Sqrt2)*math.Min(dx, dy))
你说的容易,贪心算法碰墙沿着墙边走又怎么保证路径是最短的呢,如果墙壁不光滑障碍多需要绕的路更多了,你可以做一个动画演示案例出来,别空说无凭。我做的案例,从地图到寻路到应用到分享都做成来了,寻路原理也用动画演示案例展示出来了,但是你一直在空说,也没个啥案例测试验证。
我源码里提供了几个可选选项,代码添加了备注,如果开发者需要这种可解除注释


