SDL 2,如何使用事件系统和异步绘制



您只能使用事件系统和初始化它的绘图系统,并且它们必须位于同一线程上,

想知道轮询系统如何产生,直到事件被触发

SDL_WaitEvent(&event);

我怎么说,以 60fps 的速度绘制一些东西,同时仍然能够从用户那里获取输入?我假设有一个计时器事件?或者你甚至不应该使用SDL_WaitEvent....

想知道我应该如何构建我的游戏

大多数游戏引擎不需要异步渲染,您通常有一个循环,您可以在其中更新然后渲染(更实际地说,您有固定数量的更新和动态数量的渲染(。SDL_WaitEvent是阻塞的,可能不是你想要的。您可能想要SDL_PollEvent非阻塞。您通常会继续轮询事件,直到没有更多事件。

一般循环看起来像

void gameLoop()
{
    while(true)
    {
        update();
        render();
    }
}

你会让你的更新功能是这样的

void update()
{
    SDL_Event event;
    while(SDL_PollEvent(&event))
    {
        // Handle Event
    }
    // Other Update Logic
}

这将不断调用轮询事件,直到队列中没有更多轮询事件,此时SDL_PollEvent返回 0,从而结束事件循环。从那里,您可以继续执行不依赖于系统事件的其他更新逻辑。

最新更新