“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
2012-04-08 16:30
435 查看
在前一部分的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图:
很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来!
问题在哪里:我们先回顾一下AStar.as中用于判断的if语句
?
在这个判断中,并没有规定说不允许走对象线。来看看如何修正:
在以node为中心考查四周节点时,如果遇到水平和垂直方向都是障碍物时,既使对角节点是可穿越的普通节点,也不能通过。所以只要再加二个条件判断即可
?
再运行一下:
一切正常了!
前面提到的这些示例,终点与目标点都是固定的,但在实际游戏中,正好相反,比如"星际",选定一个农民后,在地图上随便点击一下,农民就能自动找到去目标点的路径。
View Code?
拿鼠标在空白节点上随便点点,看看会发生些什么?
考虑最后一个问题:实际游戏地图中有平地,有高坡,有沙地,有雪地...不同的路面状况,行走的难度(即代价)应该不同吧?而我们刚才的所有示例中,对所有可穿越的节点都是平等对待的。如何区分出不同情况的地形呢?
关注一下:Node.as中的
?
以及AStar.as中的
?
聪明的你一定看出端倪了!没错,costMultiplier就是代价的权重因子,如果让每个节点的权重因子不同,就能体现出不同地形的行走难度程度。
View Code?
跟上一部分里的GridView.as比较起来,GridView2.as在构造函数里根据sin与cos函数,为节点设置了不同的权重因子,而且在节点着色上,深色的代价要比浅色的代价大,测试一下:
View Code?
可以看出,调整权重因子后,路径尽量在靠近浅色的区域前进!可能这样对比还不强烈,把上面测试代码中的GridView2换回GridView,对比看下没有权重因子干扰时的路径
当然,在具体游戏开发过程中,A*算法还要结合其它很多技术(比如加载地图,配合地图设置权重因子,把地图分配到网格单元等)才能最终做出不错的游戏,我们在这里只是讨论寻路算法的原理,其它方面留给大家自行去完善吧.
很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来!
问题在哪里:我们先回顾一下AStar.as中用于判断的if语句
?
在以node为中心考查四周节点时,如果遇到水平和垂直方向都是障碍物时,既使对角节点是可穿越的普通节点,也不能通过。所以只要再加二个条件判断即可
?
一切正常了!
前面提到的这些示例,终点与目标点都是固定的,但在实际游戏中,正好相反,比如"星际",选定一个农民后,在地图上随便点击一下,农民就能自动找到去目标点的路径。
View Code?
考虑最后一个问题:实际游戏地图中有平地,有高坡,有沙地,有雪地...不同的路面状况,行走的难度(即代价)应该不同吧?而我们刚才的所有示例中,对所有可穿越的节点都是平等对待的。如何区分出不同情况的地形呢?
关注一下:Node.as中的
?
?
View Code?
View Code?
当然,在具体游戏开发过程中,A*算法还要结合其它很多技术(比如加载地图,配合地图设置权重因子,把地图分配到网格单元等)才能最终做出不错的游戏,我们在这里只是讨论寻路算法的原理,其它方面留给大家自行去完善吧.
相关文章推荐
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
- “AS3.0高级动画编程”学习:第二章转向行为(上)
- “AS3.0高级动画编程”学习:第三章等角投影(上)
- “AS3.0高级动画编程”学习:第二章转向行为(下)
- “AS3.0高级动画编程”学习:第三章等角投影(下)
- “AS3.0高级动画编程”学习:第一章高级碰撞检测
- UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的"ls -l"功能
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- C++学习笔记6--高级强制类型转换 命名空间和模块化编程 C预处理器 链接和作用域 函数模板 类模板 内联模板 容器和算法
- asp.net mvc 4 高级编程学习笔记:第四章 模型
- <<UNIX环境高级编程>>学习总结——第四章:文件和目录
- AS3 高级动画教程学习之:寻路(A*算法)
- 寒假学习 第六天 (linux 高级编程)