手机斜角地图中A*算法的实用化

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

手机斜角地图中A*算法的实用化

在这里关于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了。(这也是我使用粗精度寻路方法的原因之一:) )

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航