手机斜角地图中A*算法的实用化
来源:互联网 发布:js 根据日期计算年龄 编辑:程序博客网 时间:2024/05/01 00:39
在这里关于A*算法的基本实现我不多说了,这类文章很多的,大家可以去参考。我目前还是学生主专业是J2EE方向,如果说得不对,还请各位多多包涵。
A*算法在斜角地图中的实现关键在于确定每次移动的基准点,你可以把基准点定得比较细也可以比较粗。大家可以比较下面两幅图。
在我的实现中,我选择了后者,即把基准点定的比较粗,定在每个TILE的中心。原因有两个: 一,明显计算简单,速度会快很多。 二,确定障碍物也比较方便。 前一种方法往往是在对寻路精度要求比较高的情况下使用。 当然两者混合使用也是非常好的,即在大路径上采用粗的寻路点,到了一个目标点TILE上再采用精细的寻路点进行计算。 我目前采用了这样的方法:
如上图所示,寻路的起点和终点并非总是在TILE中心的,如果要使用粗精度的A*来寻路必须使得寻路点在中心上(目前手机键只支持8方向,寻路点在中心也是必须的)。 我们采用这样的办法先计算出A*要经过的每一个TILE,然后使起始点的位置到第二个TILE的中心位置进行修正移动(即不是直接斜方向移动,而是横竖移动),这样我们的寻路点便到中心了,中间过程便可以以一个个TILE为基准进行移动(图中橘黄色的路径),到倒数第二个TILE时再进行一次向目的点的修正移动。这样便可以比较精确地进行移动了。
不要在第一个TILE中即进行修正移动,因为有可能会有这种情况,中心在人的下面,而人的A*算法的趋势是向上移动,会造成人先下移动再向上移动,非常傻。
一些看法:
1 手机中不一定要使用Binary Heap A*算法
关于Binary Heap A*算法,大家有兴趣可以看看这个http://www.policyalmanac.org/games/binaryHeaps.htm
它主要是在对于OPEN表进行了优化,但我觉得在手机游戏上不一定要使用,拿我的实现做例子,在180*208的屏幕上,我贴了40个左右的TILE。大家知道一般怪物都是有视力的,能看到1个屏多一点已经很不错了,这样的话OPEN中节点达到40个已经算是很多了(几乎不可能),我们采用二分插入排序完全可以满足性能的要求,无需使用Binary Heap了。(这也是我使用粗精度寻路方法的原因之一:) )
2 open表和closed表可以采用静态内部类继承Vector的实现方式,性能也不会亏到哪。
- 手机斜角地图中A*算法的实用化
- 手机斜角地图中A*算法的实用化
- 斜角地图
- 一款斜角地图制作工具
- A*算法搜索地图的Java实现
- cocos2dx关于正常地图的A*算法
- 45度角地图的A*算法。
- 树形地图的A*寻路算法
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- 45度斜角地图菱形坐标转换
- css之斜角的制作
- 关于GPS 转换实用地图算法
- 很实用的地图天气预报
- 由Ajax大赛想到的--老谢的博客开通了
- VC下打印机的使用
- 张忠谋讲义摘要
- ADO访问数据库大全
- 自定义异常处理
- 手机斜角地图中A*算法的实用化
- 用 Eclipse 和 Ant 进行 Python 开发
- 在Weblogic Portal里加入Struts的应用程序主要步骤
- 弹出窗体
- The Process of Software Architecting
- 从弹出窗体的操作引发父窗体的刷新
- js如何在IE中动态用xsl来解析xml
- CSDN 技术中心新版本公测喽!
- ASP.NET 网页全球化的 HTML 布局准则