应用程序中的插值会导致精灵抖动

时间:2018-05-17 18:44:16

标签: sdl interpolation game-loop

我想实现一个特殊的游戏循环,其中游戏实际上每秒仅更新25帧,同时以最高速度渲染计算机。我跟着露水游戏循环的文章并正确地进行了插值设置我相信(顺便说一句,我使用的是sdl2)......

const int TICKS_PER_SECOND = 25;
const int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
const int MAX_FRAMESKIP = 5;

Uint32 next_game_tick = SDL_GetTicks();
int loops;
float interpolation;

while (running)
{
    loops = 0;
    while (SDL_GetTicks() > next_game_tick && loops < MAX_FRAMESKIP)
    {
        Update();

        next_game_tick += SKIP_TICKS;
        loops++;
    }

    interpolation = float(SDL_GetTicks() + SKIP_TICKS - next_game_tick) / float(SKIP_TICKS);
    Render(interpolation);
}

但我真的不明白如何在渲染调用中实现插值。我试着设置我的精灵的x和y位置相对于插值......

interPos.x = pos.x + int (speed * interpolation);
interPos.y = pos.y + int (speed * interpolation);
link.Draw(ren, interPos, 0, false);

但这只是使主角精灵抖动到处都是。任何帮助表示赞赏!

0 个答案:

没有答案