(一)基本追蹤ai
實現原理:當追蹤者的x、y座標分別小於被追蹤者的x、y座標事,追蹤者的x、y自增
當追蹤者的x、y座標分別大於被追蹤者的x、y座標事,追蹤者的x、y自減
假設追蹤者的座標是predatorx和predatory,被追蹤者的座標是preyx和prey,基本追蹤的演算法 如下
```
if(predatorxpreyx)
predatorx++;
if(predatorypreyy)
predatory--;
```
這是最簡單的追蹤方法,但是實現效果不是很自然,比較好的方法是採用實現追蹤法,即讓追蹤者沿著和被追蹤者之間的直線方向前進。
(二)向量追逐
一種易於實現視線追逐的方法是,將追蹤者的方向向量設定為,從追蹤者的中心到被追蹤者的中心所定義的方向向量(下圖中的dd)
向量追蹤的基本演算法如下
計算從追蹤者到追蹤目標的向量
dd=(aimx-xpos,aimy-ypos);
將dd歸一化
dd=dd/vector_len(dd);
調整追蹤者當前的速度向量,可以加乙個rate按比例縮放
xpos+=dd.x*rate;
ypos+=dd.y*rate;
(三)攔截前面兩種追蹤都是追蹤者跟在被追蹤者後面,如果追蹤者的速度比被追蹤者慢,那麼將永遠追不上。比較合理的方法是在被追蹤者前進的路徑上的某個點進行攔截
攔截主要考慮的是攔截點的計算
攔截點不是被追蹤者路徑上離追蹤者最近的點
攔截點的計算需要考慮到讓追蹤者和被追蹤者同時到達某一點
為了讓追蹤者和被追蹤者同時到達某一點,必須考慮他們之間的相對速度。對被追蹤者的速度需要通過檢測它在兩幀之間的位移來計算,應為他的速度是實時變化的,所以攔截點也是實時變化的
攔截的基本演算法如下
計算兩幀之間被追蹤者的速度vprey
計算追蹤者與被追蹤者之間的速度差(靠攏速度)vr=vprey-vpredator
計算靠攏距離sr=sprey-spredator
計算靠攏時間tc=||sr||/||vr||
計算攔截點st=sprey+(vprey)*tc
計算追蹤者的位移
計算追蹤者與攔截點的相對距離
s=st-ppredator
調整追蹤者的速度
vpredator=s/tc
計算追蹤者的位移
ppredator+=vpredator*fdeltatime
遊戲中幾種概率設計
遊戲中常見的4種概率設計 1 常規做法,直接配置概率,程式直接判定 2 在1的基礎上,加個保底次數,當連續不發生的次數高於保底時,強制發生 3 設定基礎概率,事件不發生概率翻倍 4 設定陣列,將事件發生概率變成陣列元素 設定預計平均發生概率為1 20 20次發生1次 模擬10w次方案1 3後得結果 ...
遊戲AI之RTS遊戲中目標指引推理的經濟學方法
一 目標指引推理 在乙個目標空間中進行推理可以採用兩種方法 從初始狀態開始的正向推理 或者從目標開始的反向推理。由於在rts遊戲中,任一狀態都有大量的走法,所以反向推理顯得更為高效。很多時候,目標是無法直接達到的,這個時候就需要將目標分解成無數小的目標,依次實現。二 效用模型 在對目標進行分解後,需...
遊戲中的指令碼
現在遊戲裡流行的指令碼有python 和lua 例如魔獸世界就是用lua指令碼來驅動邏輯的。我們為什麼用指令碼,而不是純用c 呢?當然,這與團隊協作以及工作效率有關。c 編譯速度不佳,當乙個專案達到比較龐大的乙個規模時,編譯的時間往往會讓人憤怒了。於是,python出現了。一些重要的演算法實現,圖形...