AS3 作webGame 地图寻路实例 .

 

1. 总结目的

在地图中,经过鼠标或者由程序自动运行,让一我的物自动从地图的一点走到另外一点。须要计算两点之间的最优路线,要实现这样的寻路算法。最常规和最简单的方法,使用A*算法。本篇总结不具体讲解A*算法的实现以及原理,主要告诉怎么用。后面的总结中我会陆续把A*算法进行详细分析,但愿你们学习。算法

 

2. 开发流程

2.1. 地图加载

1)在寻路过程当中,地图是被分为若干个小格子,固然,根据格子数量的不一样,路线长度的不一样,计算寻路的时间也就不一样。数组

 

 

上面是有一个由20*20的地图拼起来的地图,每个地图块是有20像素*20像素元件作成。学习

每个地图块是2帧构成,地图帧是人物能够行走的路线,第二帧是障碍物(桌子)。上面的地图是路线和障碍物8比2的几率生成,参考代码:this

Block 是地图块元件类。用Flash cs3 已经作好。对象

this.mass_x_count 是指地图X轴上板块数量事件

this.mass_y_count 是指地图Y轴上板块数量开发

distancex 是指地图X轴离边界Left的距离it

distancey 是指地图Y轴离边界Top的距离table

aNodeMap 是一个2维数组,记录着每个地图块当前的状态,是障碍物仍是路线。ast

 

地图初始化中,根据两个For循环嵌套,生成一个表格状的地图。这里我不在详细介绍,详细会AS3的必定能够看的懂。

 

2.2. 地图上移动人物加载

1)路线寻路确定要有一个元件在地图上移动,才能够正确的显示出寻路的过程。不管是一我的物移动或多我的物移动,基本作法相同,下面咱们就来加载一我的物物件到地图上来。

Waiter 是一个移动的任务元件。在这里咱们叫“服务员元件”

Timer 是为服务员增长一个timer事件,主要目的是为了服务员从一个地图块移动到另外一个地图块,不是跳过去的,而是慢慢的移动过去的。

此方法主要在加载完地图后调用,指定人物加载的X,Y坐标,进行加载。

 

2.3. 选择移动目的地

1)地图和服务员加载完成后,咱们须要选择服务员移动的目的地,选择的方式有不少。举个例子,人人餐厅中客人进来就餐,首先进门后,程序会自动寻找有空位的X,Y坐标,而后计算路线,客人就会沿着路线走进去。一样服务员也会根据客人进来餐厅的循序,以及客人所作的座椅的坐标进行计算路线,而后走过去服务。

2)因为咱们只是一个例子,因此就有咱们鼠标肯定目的地。

 

this.addEventListener(MouseEvent.CLICK,clickWay);

这个事件经过,用户鼠标点击地图上路线进行调用。

 

 

 

2.4. 路线寻找,人物移动

1)在地图增长完后咱们增长一个A*算法实例

AStar是A*算法的一个封装类。咱们须要把咱们地图上路线和障碍物二维数组传递给算法。

这个是在地图加载后完成

 

2)肯定移动目的地后计算路线

上面代码是在选择目的地后补充的代码

设置A*(asrar)算法的其实点和目的地。起始点和目的地封装成ANode对象给算法的。

ANode 是一个算法计算中节点的保存,记录着节点的位置X,Y,节点ID,以及使用曼哈顿方法计算F = G + H  F、G、H值的保存。从而作为路线计算中开启列表进行存储。

最后会调用DoSearch 判断路线的获取是否成功。获取的路线调用astar.aPath 方法进行获取。

启动timer 进行服务员移动操做。

 

3)服务员移动

     在移动服务以前,咱们肯定,咱们寻找到路线,此服务员的上一个路线已经完成。

代码以下:

这个方法是在寻找到路线后,timer启动执行的。bMove 表示是否移动服务员。

player 表明当前移动中的服务员对象,他是在建立服务员的时候保存在全局变量中。

相关文章
相关标签/搜索