2014-01-09 77 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;