尝试获取正确的增量时间

时间:2018-08-21 18:50:35

标签: c++ sdl timedelta

我正在尝试用SDL创建一个简单的游戏,我目前停留在时间差上。这是主循环:

bool quit = false;
DeltaClock deltaclock;

// ...

while ( !quit ) {

    while ( SDL_PollEvent(&evt) != 0 ) {
        quit = evt.type == SDL_QUIT;
        // handle the input
    }

    double delta = deltaclock.tick();

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    SDL_RenderClear(renderer);

    world.update(delta);
    world.render();

    SDL_RenderPresent(renderer);

    SDL_Delay(1000/60 - delta);

}

// ...

这是DeltaClock类:

class DeltaClock {

public:

    DeltaClock() {
        curr = SDL_GetPerformanceCounter();
        last = 0;
    }

    double tick() {
        last = curr;
        curr = SDL_GetPerformanceCounter();

        return ((curr - last) * 1000 / static_cast<double>(SDL_GetPerformanceFrequency()));
    }

private:

    Uint64 curr;
    Uint64 last;

};

问题是当我打印增量值时,我得到的值是:600、1200、1900、150、500等。起初,我虽然在world.update()或world.render( ),这会减慢游戏的速度,因此我将其删除。但是,我仍然获得较高的增量时间值。计算增量时间的逻辑有什么问题吗?我在那里缺少什么吗?

编辑:删除对SDL_Delay()的呼叫并不能解决问题。

0 个答案:

没有答案