2014-01-09 106 views
0

我試圖動畫圖像。如何爲圖像製作動畫並調整動畫速度?

每個我的整個渲染場景時,其週期動畫中的下一個圖像的時間。

我需要放慢/速度下來/到任意值。

什麼是這樣做的通常的程序是什麼?

這是我到目前爲止已經試過:

FrameTime.h

static class FrameTime 
{ 
public: 
    FrameTime(); 

    static int current; 
    static int max; 
    static int step; 

    static void Update(); 
}; 

FrameTime.cpp

int FrameTime::current = 0; 
int FrameTime::max = 100; 
int FrameTime::step = 1; 

void FrameTime::Update() 
{ 
    if(current >= max) 
    { 
     current = 0; 
    } 
    else 
    { 
     current += step; 
    } 
} 

更新功能如何調用:

// Game Render function starts 
... 
FrameTime::Update(); 
// Game Render function ends 

我如何工作了,如果我的球員動畫應該更新:

void PlayerStateFlying::Update() 
{ 

    if(FrameTime::current % 2) 
    { 
     current = sequence[ index ]; 
     if(index == (sequenceAmount - 1)) 
     { 
      index = 0; 
     } 
     else 
     { 
      index++; 
     } 
    } 
} 

的問題是,上面的代碼不會讓我有float精度速度。

回答

1

你可以簡單地做:

  • 定義一個變量fps每秒的動畫必須以
  • 啓動移動計算時間的推移,每一個幀,並將其存儲在delta爲毫秒保持幀的數量
  • 聲明變量total並開始與delta每幀
  • 每幀遞增它,的遞增後210,檢查是否(1000/fps > total)
    • 如果是,那麼是時候前進total/(1000/fps)幀的動畫和更新總數達到fmod(total, (1000/fps))
    • 否則,就繼續
+0

感謝的人,我試着這樣做,但現在你把它如此簡單..噓Yaka酒店空間Shann ..讓我implementareeno – Jimmyt1988

+1

@詹姆斯動畫效果由增量時間是迄今爲止最簡單的方法。你希望你的動畫獨立於框架,因爲模型/紋理的FPS將不同於遊戲。所以你可以說,我有10張圖片,讓我們一次玩1秒。使用增量時間,就像顯示帶有增量時間的計數器的幀一樣簡單。 – 2014-01-09 01:46:32

+0

這是否意味着我會在某些情況下跳過一些動畫序列? – Jimmyt1988

-1

我希望你能得到一些如何物理學的理解可以應用於

Physics Engine in Game

Wiki Pedia

爲處理對象的速度,這在其他方面,它意味着控制你需要實現牛頓動力學運動中的物體。這是由三部法律議案的說明:

  1. 的物體則保持靜止,或繼續在一條直線路徑移動,直到力已經在其

  2. 行動身體的加速度與即將到來的淨力相同和相同的方向成正比。

  3. 對於每一個行動都有一個平等和相反的反應。

第一定律是指:一個對象將改變其速度,當且僅當其它力被添加到它或施加到it.Example:如果球是在直線移動時,它會保持在移動一條直線,直到外力施加於其上。現在這個外部可以是任何東西,它可能是減慢或通過摩擦的風。

第二定律是指:當力被施加到一個主體,它改變對象的速度,第二定律定義了變化:

第三定律是指:如果衝壁,所述壁將反應通過對你施加武力。所以這個動作是在衝牆,反應是牆對你施加一種力量。


要實現遊戲的規律,我們用數值積分

最常用的一個是半隱式歐拉積分

dt是時間過去了(有對象的位置和加速交易)最後一幀。

NextVelocity = ThisVelcoity + CurrentAcceleration * dt; 
    NextPosition = ThisPosition + NextVelocity * dt;