遊戲中常見的幾種追蹤演算法

來源:互聯網
上載者:User

  所謂追蹤,相對於另外一個角色來說是逃跑,首先需要做出追和逃跑的決策判斷。

1.座標追蹤
       也是最基本追逐方式,他根據要追蹤對象的座標來修改追蹤者的座標,使兩者的距離逐漸縮短。
        一個簡單的例子:
              Point   m_pPrey;   /// 被追蹤者
              Point   m_pAtta;   ///  追蹤者
        對於追蹤者來說:   新位置 =  舊位置 +  XY速度 ; 
            

 1if( m_pAtta.x < m_pPrey.x )
 2    m_pAtta.x ++;
 3else if( m_pAtta.x > m_pPrey.x )
 4    m_pAtta.x --;
 5
 6
 7if( m_pAtta.y < m_pPrey.y )
 8    m_pAtta.y ++;
 9else if( m_pAtta.y > m_pPrey.y )
10    m_pAtta.y --;

 
2.視線追蹤
      視線追蹤方式,主要是描述每一時刻都追蹤者會沿著被追逐者之間的直線方向運動。:
                    
     通過圖可以更好描述此問題,此問題的求解關鍵在於求出串連追蹤者與獵物之間的直線,可以通過向量知道:2個向量想減即可得到。
     可以分別用追蹤者與獵物的位置座標構造出兩個向量,假設b 代表追蹤者位置向量,a 代表獵物位置向量。做向量減法a-b 便得到了向量c,將c 的起點置於追蹤者的位置上,就得到了一條指向獵物的向量c. 此時,令:

     追蹤者X 方向速度 / 追蹤者Y 方向速度    =     c 向量x 軸分量/   c 向量y 軸分量 .即可求解。

3.攔截追蹤
      所謂攔截追蹤,如果考慮的是被追逐的目標太遠,如果2者速度一樣,或者相差不大,有可能很難追上,玩過實況足球的都知道,如果採用上面的2中追逐方式,可能錯過最佳的防守位置。下面是攔截追蹤的一個樣本圖:

   
    對於追蹤者來說,他只需要知道被追蹤者的位置,方向與速度,講會計算一個最佳的攔截位置。然後你會發現這隻是一個簡單的追蹤問題。且需要的時間t最少。

整個3種追蹤的源碼代碼 以及 demo都共用:
/Files/expter/chase.rar

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.