了解SDL帧动画

时间:2015-03-20 15:37:47

标签: c++ sdl sdl-2

我正在阅读这本书SDL game development。在第一个项目中,有一些代码用于移动精灵表的渲染帧的坐标:

void Game::update()
{
    m_sourceRectangle.x = 128 * int((SDL_GetTicks()/100)%6);
}

我无法理解这一点......我知道它每100毫秒沿着x轴移动m_sourceRectangle 128个像素......但它实际上是如何工作的?有人可以细分这段代码的每一个元素来帮助我理解吗?

我不明白为什么需要调用SDL_GetTicks()来执行此操作...

我也知道%6就在那里,因为动画中有6帧......但它实际上是如何做到的?

这本书说:

  

这里我们使用SDL_GetTicks()来找出自SDL初始化以来的毫秒数。然后我们将它除以帧之间我们想要的时间量(以毫秒为单位),然后使用模运算符来保持   它在我们动画中的帧数范围内。此代码将(每100毫秒)移动源矩形的x值   128个像素(帧的宽度),乘以我们想要的当前帧,给我们正确的位置。构建项目,您应该看到动画显示。

但是我不确定我理解为什么在SDL初始化之后获得毫秒数。

2 个答案:

答案 0 :(得分:3)

模运算符占用除法的其余部分。因此,例如,如果GetTicks()是2600,则首先除以100使其为26并且26的模6为2.因此它是第2帧。

如果GetTicks()是3300;你除以100得到33;模数6的33是3;第3帧。

答案 1 :(得分:1)

每帧将显示100ms,因此在T = 0ms时它是帧0,t = 100ms它是帧100/100,在T = 200ms它是帧200/100,依此类推。所以在T = SDL_GetTicks() ms时,它是帧SDL_GetTicks()/100。但是你只有6帧并且一起循环,因此在T = SDL_GetTicks() ms时它面对帧(SDL_GetTicks()/100) % 6

这里假设当程序启动时,显示第0帧,这可能不是真的,因为在开始时有很多事情需要花费时间。但是对于简单的演示来说明帧的循环,这已经足够了。

希望这有帮助。