vue,ts, 面向對象,canvas2d
demo: https://blog.unrun.top/mctato/
1 月開始的想法,剛開始 7,8 個 js 文件按順序寫到 html 的 scrip 標籤中,真的很累,
後來用 vite,ts 重構 import 相互引入就行,最後打包
主要思路
玩家,僵屍類,特效類,飛行物類,繼承自矩形類
矩形類有繪製,移動等方法
- 監聽按鍵進行移動
- 碰撞檢測使用寬相位檢測,先檢查一個維度的情況從而過濾一部分
- 怪物尋路基於路徑點
- 怪物與玩家分別尋找可視 (連線沒有牆阻隔) 最短路徑點,分別連接最近路徑點,然後是帶權無向圖的最短路徑問題 (同時考慮起始兩端的距離,加入到短路徑的計算)
- 帶權無向圖的最短路徑問題用迪傑斯特拉算法(可以緩存部分計算結果,但沒有這樣做,影響不大)
一些圖片
"最短路徑"
碰撞檢測
動畫幀
重構前
寫了很久,最後效果不太好