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

标签 c++ 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 从而结束事件循环。从那里您可以继续执行不依赖于系统事件的其他更新逻辑。

关于c++ - SDL 2,如何使用事件系统和异步绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386995/

相关文章:

c++ - glVertexAttribDivisor 在 nVidia 上无法正常工作?

c++ - "duplicate data type in declaration"是什么意思?

c++ - SDL_TTF 渲染错误的地方

c++ - 当您在 SDL2 中移动窗口时,如何解决程序卡住问题?

c++ - 如何将旧的 C 代码与其中的保留关键字与 C++ 链接?

c - 将 SDL2 与 gcc 链接

python - PySDL2 和 SDL_FreeSurface

python - 并行 Python-C++ 程序卡住(内存?)

c++ - Qt MouseMoveEvent 仅在按下鼠标按钮时触发

c++ - 用默认值标记网格 C++