您只能使用事件系统和初始化它的绘图系统,并且它们必须位于同一线程上,
想知道轮询系统如何产生,直到事件被触发
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,从而结束事件循环。从那里,您可以继续执行不依赖于系统事件的其他更新逻辑。