功能描述:
結合A*算法和HTML5完成的一個尋路demo。
鼠標點擊地圖任意位置,飛鳥會尋找最短路程到達該位置。
效果預覽:
代碼分析:
具體的A*算法尋路邏輯請看這里推薦的一篇很好的文章,我就不再詳述:
英文版:http://www.policyalmanac.org/games/aStarTutorial.htm
中文版:http://blog.vckbase.com/panic/archive/2005/03/20/3778.html
另外具體說說里面提到過的“穿越拐角規則”的實現:
所謂的“穿越拐角規則”,就是如下圖中所出現的情況:假設綠色是障礙物,當右邊的紅色格子想到達上面的黃色方格,並不允許直接由紅色方格跳到黃色方格,而需要經過藍色方格的情況:
我的實現方法是判斷使用當前格子的x值和下一個格子的y值的格子或者使用當前格子y值和下一個格子x值的格子是障礙物,則在該次尋路過程中忽略該格子。
代碼:
if (isWall(pointsArr[i][point.x], this.wallValueArr) || isWall(pointsArr[point.y][j], this.wallValueArr)) {
//拐角規則,如果檢測某點四周的點時,該點和四周上某點之間隔着一個障礙物,則忽略該點,暫不添加到開始列表
continue;
}
另外,demo中的效果使用了自己開發的HTML5游戲框架cnGameJS,關於cnGameJs詳細請看這里:《HTML5游戲框架cnGameJS開發實錄》
完整demo下載:點擊這里
歡迎轉載,請標明出處:http://www.cnblogs.com/Cson/archive/2012/02/21/2362369.html