HTML5遊戲開發進階 7 :單位智慧移動
向被選中的單位下達命令,並使其執行該命令。將實現最基本的命令:使用自動尋徑導航演算法實現的單位智慧移動。
7.1 命令單位
單擊左鍵選中單位,通過單擊右鍵給單位下達命令。
用右鍵單擊地圖上的一點,就會移動到這個點。
右鍵單擊一個敵軍單位或建築會攻擊該單位。
右鍵單擊友方單位會命令選中的單位跟隨並保護該友方單位。
選中採油車後用右鍵單擊油田會命令採油車移動到油田上,並展開成煉油廠。
mouse中click()方法
7.2 傳送和接收命令
game.sendCommand()
為每個item新增Orders屬性
7.3 執行指令
為每個需要的單位實現processOrders(),並在遊戲動畫迴圈中為所有的單位呼叫該方法。
7.4 實現飛行器移動
aircraft.js中processOrders()方法
7.5 路徑規劃
Dijkstra演算法及其變種A*演算法是兩種最常用的基於圖論的尋徑演算法
A*演算法額外使用一個啟發式距離變數,因此,它比Dijkstra演算法執行得更快,效率更高。
程式碼http://devpro.it/javascript_id_137.html中找到最新的程式碼和一個生動的例子。
7.6 定義尋徑格網
建立二維陣列網格game.currentMapTerrainGrid
每次新增或移除建築或地形單位時,該陣列都要被重新建立。
為每個建築定義passableGrid屬性,這樣就可以允許建築的某個部分可通行(比如,星港的下半部分)。
已經為A*演算法定義好了移動格網
7.7 實現車輛移動
vehicles物件新增預設的processOrders()方法
值得注意的是,雖然車輛能夠繞過不可通行的地形,但仍然會與其他車輛重疊在一起。
解決該問題的一個簡單方案是,將所有車輛所在的網格標記為不可通行。然而,這個過於簡單的方法可能導致地圖上的大面積堵塞,因為車輛經常穿過多個網格。該方案的另一個缺點是,如果試圖同時移動若干車輛穿過一處較窄的通道,第一輛通過的車就會阻塞通道,導致其後的車輛試圖尋找另一條較遠的路徑,或者,在更壞的情況下,認為不存在可行的路徑而放棄。
較好且可行的解決方案是,實現包含碰撞檢查的導航,在車輛擁堵時改變車輛的移動方向,但仍然儘可能儲存原有的路徑。
7.8 碰撞檢測和導航
與路徑規劃一樣,導航是一個相當複雜的人工智慧問題。參考論文Steering Behaviors for Autonomous Characters被認為是在遊戲中開發導航機制的基礎和起點。
遊戲中導航的實現相當簡單。首先,檢查某行進中的車輛在其路徑上是否會與其他車輛碰撞。如果是,那麼為將要發生碰撞的車輛生成來自碰撞物件的斥力和較小的朝向原先行進方向的拉力。
接著,我們將這兩個力向量相加來確定車輛接下來的方向以避開碰撞。車輛將一直向新的方向移動,直到不再檢測到任何可能發生的碰撞,此時車輛再回到之前規劃好的路徑上。
基於將要發生碰撞的車輛間的距離來區分“硬撞擊”和“軟撞擊”。即將發生“軟撞擊”的車輛會一邊繼續移動,一邊調整方向,而即將發生“硬撞擊”的車輛則會停止移動,原地轉向。
vehicle物件實現預設的checkCollisionsObject()
7.9 將採油車展開為煉油廠
vehicle.js
7.10 流暢移動
使動畫看上去更流暢的一個簡單方法就是在動畫迴圈之間對車輛的移動進行插值。計算距離上一次動畫迴圈的時間,並建立一個插值量,該插值量用來決定單位在“動畫迴圈間隔中的”繪製迴圈中的位置。這個小改動將使單位看上去以更高的幀頻運動,即使動畫迴圈實際上每秒才執行10次。
相關文章
- 7個HTML5移動開發框架,初學HTML5必看HTML移動開發框架
- 使用Xamarin開發移動應用示例——數獨遊戲(五)儲存遊戲進度遊戲
- 《Unity移動遊戲開發》讀後感Unity遊戲開發
- 2020上半年移動遊戲報告:過半移動使用者玩遊戲 移動遊戲進入中場遊戲
- 使用Xamarin開發移動應用示例——數獨遊戲(四)產生新遊戲演算法改進遊戲演算法
- 2020遊戲研發力量調查(移動遊戲篇)遊戲
- 使用Xamarin開發移動應用示例——數獨遊戲(二)建立遊戲介面遊戲
- 使用Xamarin開發移動應用示例——數獨遊戲(七)新增新遊戲遊戲
- 移動端HTML5頁面開發備忘錄HTML
- Three.js 進階之旅:全景漫遊-初階移動相機版JS
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- HTML5遊戲開發過程中的二三事HTML遊戲開發
- 用REM單位進行移動端適配的最佳實現REM
- 使用 .NET 進行遊戲開發遊戲開發
- 戲說移動江湖開發歷程
- 前端開發入門到實戰:HTML5進階FileReader的使用前端HTML
- 《HTML5移動網站與App開發實戰》簡介HTML網站APP
- 伽馬資料:2020年7月移動遊戲報告遊戲
- Sensor Tower:2020年7月全球移動遊戲下載榜遊戲
- HTML5遊戲開發(五):飛機大戰之讓所有元素動起來HTML遊戲開發
- 對話白俄羅斯最大移動遊戲開發商:如何拿下消除類遊戲市場遊戲開發
- [譯]移動遊戲發行的新時代遊戲
- HTML5遊戲開發(二):使用TypeScript編寫程式碼HTML遊戲開發TypeScript
- 阿里開源HTML5小遊戲開發框架Hilo實戰教程阿里HTML遊戲開發框架
- 遊戲開發中的人工智慧遊戲開發人工智慧
- 《Tsuro》實戰分享:移動VR遊戲開發經驗與教訓VR遊戲開發
- 【開發者必看】移動應用趨勢洞察白皮書-遊戲篇遊戲
- App Annie:2021年7月全球移動應用及移動遊戲指數排行榜APP遊戲
- HTML5進階FileReader的使用HTML
- 智慧合約盲盒遊戲開發上線版丨智慧合約盲盒遊戲系統開發(開發案例)遊戲開發
- IDC:2019年7月中國移動遊戲排行榜遊戲
- 2020年7月全球熱門移動遊戲收入TOP10遊戲
- TalkingData: 2020遊戲研發力量調查-移動遊戲篇(附下載)遊戲
- 2020移動遊戲預測遊戲
- python小遊戲-移動木板Python遊戲
- HTML5遊戲開發(三):使用webpack構建TypeScript應用HTML遊戲開發WebTypeScript
- AppLovin宣佈任命四位移動遊戲高管,進一步加強管理團隊APP遊戲
- 移動遊戲開發十誡!第一個雛型就要搞定的事遊戲開發
- 位運算進階