2010-01-25 68 views
9

在足球比賽中,我使用轉向行爲來計算轉向力。這部分是好的。 但是,我正在尋找實現簡單2D人類運動的最佳方法。例如,當轉向力與當前速度或航向矢量之間的cos(角度)低於0.5時,運動員不應該「轉向」(或者簡單地將從轉向力計算的加速度加上)到其當前速度,因爲看起來好像該玩家是一輛車。一個人在方向發生重要變化時會減速,當它變慢時,它會開始在新的方向上加速。模擬人類在足球場上跑步

有沒有人有任何建議,想法如何實現這種行爲?提前致謝。

回答

4

讓它改變方向非常快,但沒有完美的摩擦。 EG超級馬里奧

編輯:,但腳不應該滑動 - 使用程序動畫英尺

+0

我沒有那麼複雜的圖形,現在只需簡單的GDI +就可以繪製出球場和球員的自上而下的視圖。 你的意思是,在每一步,我應該只設置在同一方向所計算的加速度(從轉向力)的速度矢量,如果COS(角)低於一定值(表示在方向上的大的變化) ,我應該重新加速之前的速度幅度? 這會讓玩家總是朝正確的方向前進,如果它必須突然改變方向,在重新加速前它的速度會降到零。 – sowee15 2010-01-25 18:24:01

2

也許你可以計算的曲率。如果曲率值較大,則速度變慢。 http://en.wikipedia.org/wiki/Curvature

+1

不會使用當前速度和所需轉向力之間的cos(角度)有些相同且更簡單? – sowee15 2010-01-25 18:27:04

+0

是的它更簡單 – kame 2010-01-25 19:58:18

3

這已經在一個名爲「Robocup」的倡議中進行了研究和開發。他們有一個模擬2D聯賽,應該與你想要完成的很相似。

下面是應該指向你到正確的方向鏈接: http://wiki.robocup.org/wiki/Main_Page

+0

是的我知道Robocup,你說得對,它和我正在做的非常相似。我必須承認我沒有檢查過服務器的源代碼,但是我在YouTube上看過模擬robocup的視頻。我認爲這種行爲必須像我在cmy對tm1rbrt發表的評論中所說的那樣重複(見上文)? – sowee15 2010-01-25 18:25:30

1

在低速人可以打開一角錢。在高速情況下,只需非常輕微的轉動就不需要減速。轉彎的速度和半徑因此強相關。

當瞄準一個目標時,一個人減速多少實際上是一個判斷呼叫,而不是一個自動計算。一個人可能會幾乎完全停下來,急轉彎,直接朝目標奔跑。另一個人可能只會慢一點,並且會形成一個很寬的彎曲弧線,即使這會增加目標的總長度。唯一需要注意的是,如果所需目標在當前速度下處於曲線半徑範圍內,唯一合理的途徑就是放慢速度,因爲它需要一個遠離目標的大環路才能達到目標(而不是無限循環) )。

以下是我如何去做這件事。如果你更喜歡公制,我會爲帝國單位道歉。

  1. 有史以來最快的人類旅行時速不到28英里。每個人類單位都應該獲得1至28英里/小時的個人最高速度。
  2. 創建一個以直線表示的每個整mph行駛的人類最大加速度和減速率的29個元素表。它不一定是確切的 - 只是爲每個值近似加速和減速值。創建29個元素表的快速,中等,緩慢版本,並將每個人分配到這些表中的一個。選擇的表格可以映射到單位的最高速度,所以最大速度爲10mph的單位將是一個緩慢的加速器。
  3. 創建一個人類可以以mph(0-28)轉彎的最銳利半徑的29元素表。

現在,每個動畫人單位時,如果你有目標信息,必須選擇從加速,任務更難。如果你只是有一個力矢量,那就更容易了。讓我們從力矢量開始。

  1. 如果力矢量的淨加速和所得角將超過的單元的能力的極限,限制單元的新的向量爲所允許的最大角度,並且還在其當前線速度其最大速率減速單元。
  2. 在下一次時鐘滴答時,速度會變慢,它將會變得更加尖銳。
  3. 如果力矢量可以完全適應,但單位的行駛速度低於其曲率的最大速度,則應用該單位在該速度下的最大加速度。

我知道細節將會非常困難,但我認爲這是一個好的開始。

對於您有一個目標,需要選擇一個力應用尋路版本,問題是有點不同,就更難了。我現在已經沒有想法 - 但足以說明,考慮到人類已經從頂尖目標離開目標的示例情況,一方面將存在最佳時間路徑,在轉向完成對目標的完美弧線時足夠緩慢,另一方面完全停止,完全旋轉並直線奔向目標。