遊戲中幾種簡單的追蹤AI

2021-09-18 04:32:00 字數 1627 閱讀 1487

(一)基本追蹤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出現了。一些重要的演算法實現,圖形...