我使用SDL2在C++中拼凑了一个非常基本的游戏循环,我注意到每隔几秒,SDL_PollEvent似乎异常缓慢,即使什么也没发生.
我发送deltaTime来控制每个循环,它在SDL_PollEvent滞后的周期上差不多100ms.我已经通过移动我的计时器确认了这个功能,但我不确定在哪里进一步诊断问题.
我的循环:
while (!quit) {
uint32_t startTime = SDL_GetTicks();
while (SDL_PollEvent(&e) != 0) {
std::cout << "Event: "<< e.type << std::endl; // Added later, read update
if (e.type == SDL_QUIT) {
quit = true;
}
}
if (engine.AllowUpdate()) { // Restricts updates to every 20ms
GameState::Update();
}
engine.rMan.BeginRender();
//^v Literally just SDL_RenderClear and SDL_RenderPresent
engine.rMan.FinishRender();
engine.deltaTime = SDL_GetTicks() - startTime;
std::cout << std::setw(10) << engine.deltaTime;
}
Run Code Online (Sandbox Code Playgroud)
我也注意到即使我没有调试也会发生这个问题,而且至少还有一台其他机器没有.任何有关如何进行的建议都将非常受欢迎.
编辑1:尝试打印以控制通过队列的所有事件,以查看其中一个是否导致问题.在上面的代码中添加了打印行.在有滞后的时候似乎没有发生任何事件,而我却无所事事.
编辑2:根据要求,一些可运行的代码,使用SDL 14在VS2017上使用SDL2-2.0.9构建:
#include <iostream>
#include <SDL.h>
void InitSDL();
void …Run Code Online (Sandbox Code Playgroud)