主角功能完善,怪物仍是靜止靶子。賦予精靈 AI(人工智能),以「追蹤者」為基礎:發現敵對→鎖定→移動攻擊→目標逃跑則持續追擊。佔 MMORPG AI 80% 以上。本節實作怪物追蹤者 AI。
主角與怪物同為 QXSpirit,將移動、攻擊、尋路等方法加入 QXSpirit spirit 參數,把 Leader 改為 spirit,所有精靈復用。例 ArriveTarget:
private bool ArriveTarget(QXSpirit spirit) {
return (Super.storyboard.ContainsKey(spirit.Name) && SpiritStoryBoard(spirit.Name).GetCurrentProgress(spirit) == 1);
}
用字典管理所有精靈動畫板:Dictionary<string, Storyboard> storyboard。移動時檢查鍵值存在否,不存在則新建。Lambda 取得指定 Storyboard:
private Storyboard SpiritStoryBoard(string key) {
return Super.storyboard.Single(x => x.Key == key).Value;
}
停止/死亡時移除 Storyboard 釋放資源。
每怪物賦予索敵範圍 SeekRange。玩家進入該圓形區域(中心怪物座標,半徑 SeekRange)即鎖定攻擊。用輔助執行緒(1 秒掃描一次)實現「引怪易、甩怪難」:距離 < SeekRange 即引怪;距離 > SeekRange 持續 1 秒才甩怪。邏輯:
private void RefreshFace() {
if (spirit.VLife != 0 && Super.InCircle(Leader.X, Leader.Y, spirit.X, spirit.Y, spirit.SeekRange) && IsOpposition(spirit, Leader)) {
spirit.LockObject = Leader.Name;
} else {
spirit.LockObject = null;
}
}
怪物具備索敵與戰鬥 AI。下節將呈現魔法盛宴,敬請期待。