2013-05-31 126 views
0

我正在進行一個簡單的2D遊戲。我正在做一個圖像的線性移動動畫到各個方向。涉及加速/減速的運動動畫

移動圖像的功能(move_to_right)需要2個參數

  1. Distance:總行駛距離
  2. Duration:持續時間,以覆蓋該距離

保持該圖像具有的類這些變量需要做線性運動:

  1. distance_total:商店總距離
  2. frame_total(從「距離」參數採取):存儲總幀所需
  3. frame_spent(由「持續時間」參數採取):多少幀動畫期間傳遞
  4. speed:如何許多像素每幀的圖像移動,最初爲0
  5. 基本圖像變量如x,y座標,寬度,高度等

粗糙代碼:

class Animated 
    def initialize 
     #all things needed to show a picture properly in the screen along with its properties such as x, y coordinates. 
    end 
    def move_to_right (distance,duration) 
     @distance_total = distance 
     @frame_total = duration 
     @frame_spent = 0 
     @speed = @distance_total/@frame_total 
     #the animation runs in game's loop, but for this time, to make it simple and easy to understand, I'll just use while statement 
     while @frame_spent <= @frame_total 
      self.x += @speed 
      @frame_spent += 1 
     end 
    end 
end 
$test = Animated.new 
$test.move_to_right (100,60) 

上面的代碼運行良好,但就是這樣,只是一個簡單的線性運動動畫。圖像移動100 pixel向右in 60 frames

現在,我需要涉及的加速/減速的動態運動,這裏的情景:

  1. 持續時間的前30%涉及加速度。速度從0開始,並從幀提高到幀
  2. 接下來的40持續時間invoves 線性運動的%。速度不變並且不變
  3. 最後30%的持續時間涉及減速。速度從線性移動的最後一個速度開始,然後逐幀下降,直到最後停止。
  4. 那些場景肯定不是對總距離和持續時間有任何影響。這意味着,所有這些都必須在60幀內覆蓋100個像素。

問題是: 1.我需要什麼變量來執行上述場景?他們用於什麼? 2.什麼是步驟?如果可以的話,還請包括方程式/計算以使其清楚

您不必用代碼回答;文本解釋或方向將是一個很大的幫助。沒有語言限制,所以如果你想使用任何絕對沒問題的語言來幫助代碼。在此先感謝:)

+0

如果這是特定語言的代碼,則應該添加一些[語法高亮顯示](http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints)。 – Dukeling

回答

1

這不是diffucult,但有點費力的問題。

您應該繪製V-t圖表來了解您的問題。

曲線下方的面積等於您的距離。現在你可以計算加速的數量。

1-在move_to_right方法中使用3循環。第一個循環將運行幀的%30的持續時間,並且速度+ =加速度,x + =速度;

3-第二個循環將運行幀的%40並且x + =速度;

4-幀和速度的最後一個循環%30 - =加速度,x + =速度。

希望它能幫助你! :)

+0

我瞭解v-t圖表。如果我知道每個循環的最終速度,我可以計算加速度/減速度。問題是在這種情況下唯一清楚的是要覆蓋的時間和地區。需要覆蓋的區域爲100個,由2個三角形和1個框組成。所有已知的是這兩個三角形+ box = 100的總和,並且它們都在60幀中。 100和60取自一個參數,因此下一種情況可能是30幀中的200像素,等等。沒有什麼固定的。如何找出速度?如何找出每個三角形和矩形的面積? – AzDesign

+0

加速度不變。對於方法(200,30),它增加直到達到a * 9t,繼續12幀並減少9幀(達到V = 0) )。 – Daedelus

0

link是完美的,它回答了我的問題。緩動動畫變得更加靈活,無需特殊的運動代碼。令人敬畏的是,整個腳本是獨立的,對現有代碼沒有任何影響。它有多種語言版本。