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 表明當前移動中的服務員對象,他是在建立服務員的時候保存在全局變量中。

相關文章
相關標籤/搜索