一般在矩形(tile)游戏地图中,要从A点走到B点,这就要寻路,一般都用A*算法来产生路径。
但是如果A点和B点之间没有障碍物,又刚好不是A*所能接受的直线,那么游戏角色所走的路径就很怪了。因此需要在使用A*寻路前,使用直线寻路来判定是否起点和终点间没有障碍,如果可以直接通过,那就不用A*寻路而直接沿直线走过去就可以了。
那么如何实现直线寻路呢?实际就是判定 A点和B点之间是否有障碍了。
这个过程大有文章可做。如果弄得不好会很耗cpu,办法有很多,我这里的做法是拟合直线的反向操作来实现直线寻路 。
方法大致是: 从A点向B点画一条线, 然后找到和这条线相交的所有格子。
如何找到这些格子呢?如下图:
通过在A和B之间生成连续的矩形,而每一个矩形都能确定若干格子,这样的话,就得到这些格子了。如果这个路径中某个格子有障碍物,那么
A到B就是走不通的需要借助A*寻路来获取路径,反之可以沿A到B的直线走动。
flash演示如下:
http://vilylei.purpgame.com/test/rectmap/RectMap.html
源码下载:
http://vilylei.purpgame.com/test/rectmap/RectMap.rar