你只能在初始化的地方使用事件系统和绘图系统,而且它们必须在同一个线程上,
想知道在通过以下方式触发事件之前轮询系统如何让出
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/