看这个图,我们发现这个寻路算法有点傻,明明终点在右侧却每个方向都找。难道没有其他办法了吗?从现实生活中我们知道东西如果在东边,当然是往东边搜索才是最好的办法。

Figure 2

计算机中如何表示离目标近呢? 用图来解释就是这样的,目标在右上角,我们往右走,从X轴的角度来说离目标又近了一步,同理往上走是在Y轴上里目标近一步。最好的一步应该是图中-2的点,X轴和Y轴同时离目标近了一步。简单地转换成代码就是下面的这样:

000

扔到heap的比较条件中我们轻易地就实现了按照离目标距离优先的寻路算法,startPathFinding整个方法都不要改,只需要传进去上面提到的比较方法就行了。

-000

离目的地的距离优先效果图:

Figure3

我们惊奇地发现似乎我们成功了,就用了9步就找到了目的地!

算法改进

从图2中我们用的是X轴和Y轴上的相对距离,并不是真正的物理距离,手机号转让平台意识到这个问题我们马上修改了比较函数。物理距离当然容易算了,公式如下:

换成C++函数就是下面的样子:

000

演示了下发现没有什么变化。但我们知道我们变的更好了。

该算法存在的问题

1.很容易想到的一个问题是,它没有考虑权重!如果目标在右侧,而右侧是一条非常难走的路,那么这个算法将毫无顾虑地走过去,丝毫不考虑就在不远处有条非常轻松的路。下面这个图就可以说明这个问题。

2.还有个问题,即使没有权重Cell的存在,只有可通过和不可通过Cell的存在,这个算法也有问题,我们可以人为地制造一个陷阱,虽然目标在起点的下方,但是上面有条更近的路,这个算法应该会愚蠢地在往下找吧,这个就跟人一样,有时候目光短浅。下图是演示结果。

对比之前的算法发现其实上面的这条路更好的,虽然它查询了大量的Cell才发现这点(人家很努力的好不好)。

看看还有什么更好的办法没有?期待下篇的寻路算法吧。

Cocos2d-x 寻路算法解析(二): 离目的地的距离优先相关推荐

  1. Cocos2d-x 寻路算法解析(一): 距离优先

    寻路这块在游戏中一直很重要,花了点时间研究了下这个问题,主要参考的是<Data Structures For Game Programmers>,其他的算法用普通Console演示就行了, ...

  2. 【视频算法解析二】I3D

    [视频算法解析一] C3D算法 [视频算法解析二] I3D算法 [视频算法解析三] ECO算法 paper原文是"Quo Vadis, Action Recognition? A New M ...

  3. java 寻路算法_游戏中的寻路算法解析

    游戏角色的自动寻路,已经是游戏中一个历史比较悠久的领域,较为成熟也有很多种实现.这里摘录一句后面所提的参考资料中的描述:"业内AI开发者中有一句话:"寻路已不是问题."我 ...

  4. Java数据结构与算法解析(二)——栈

    栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶.对栈的基本操作有push(进栈)和pop(出栈),对空栈进行push和pop,一般被认为栈ADT的一个错误.当push时空间用尽 ...

  5. 迷宫生成算法和迷宫寻路算法

    迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成算法的小程序,当时反响十分好,过了几天我又用自己已经学的DirectX技术制作了DirectX版的程序.这 ...

  6. 计算机算法讲解的ppt,智能计算几种经典算法解析.ppt

    <智能计算几种经典算法解析.ppt>由会员分享,可在线阅读,更多相关<智能计算几种经典算法解析.ppt(20页珍藏版)>请在装配图网上搜索. 1.智能计算几种经典算法解析,制作 ...

  7. c语言酶切算法,科学网—FitHiC V1算法解析(一) - 卢锐的博文

    FitHiC V1主要用于识别中程顺式互作 处理Hi-C数据,最自然的分辨率划分方法是基于限制性内切酶切出来的酶切片段,即一个酶切片段为一个最小单位.但是,因为测序深度和基因组上感兴起的size不同, ...

  8. 【解析】A星寻路算法介绍

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...

  9. 寻路算法实例解析:贪吃蛇AI的实现

    本文是寻路算法的实际应用篇,以贪吃蛇的实现为例子. 1.首先看下这个在微博上很火的贪吃蛇gif 这次我们尝试用代码来模拟下,说不定上面这个图就是计算机搞的. 2.讲贪吃蛇snake AI之前,我们先看 ...

最新文章

  1. 列注释_简单5步了解相关矩阵的注释热图
  2. 张亚勤:从信息化生存到互联网化生存 百度重构互联网安全防护体系
  3. 并发编程-24 高并发处理手段之扩容思路 + 缓存思路
  4. 【Python】青少年蓝桥杯_每日一题_3.19_约分
  5. Python之一行代码
  6. [shell基础]——sed命令
  7. 华为虚拟一键部署服务器,一键部署云服务器
  8. js密码强度正则表达式_知道这20个前端正则表达式,能让你做项目时少写1000行甚至一万行
  9. mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測
  10. (19)HTML5 <progress> 标签
  11. JAVA锁之公平锁和非公平锁
  12. 软件测试薪资标准新鲜出炉,你达标了吗?
  13. kafka sasl java_kafka 添加SASL鉴权
  14. 【jvm jdk】锁状态位之偏向锁
  15. 生物化学复习题I·蛋白质
  16. python百度热搜指数+动态可视化排行榜
  17. web爬虫讲解—urllib库中使用xpath表达式—BeautifulSoup基础
  18. GAPNet基于图注意力的点神经网络用于局域特征探索
  19. 苹果发布会:或将发布一款付费游戏订阅服务
  20. VUE实现页面局部刷新

热门文章

  1. java的reflection机制_Java的Reflection机制
  2. python队列来做什么_python分布式爬虫中的消息队列是什么?
  3. n1进入recovery模式_oppo n1怎么进recovery
  4. Java 类型转换
  5. Mysqldump逻辑备份与恢复
  6. Django - Python3 常用命令
  7. 【Codeforces】 Round #374 (Div. 2)
  8. 使用jQuery的hover事件在IE中不停闪动的解决方法
  9. BZOJ2388 : 旅行规划
  10. jQuery表单对象属性过滤选择器