我正在制作一个简单的游戏,我想将主窗口设置为全屏模式。我使用
SDL_SetWindowFullscreen
执行此操作,但显示窗口需要一些时间。我想在设置窗口模式期间冻结游戏时间。有什么方法可以获取窗口显示模式的状态,以便我可以确定何时暂停、何时恢复游戏时钟?
提前谢谢您!
首先,在 SDL 初始化后,我尝试将自己的事件推送到 SDL2 事件队列。为了处理该事件,我使用
SDL_GetWindowFlags
检查了窗口标志与所需的全屏模式。如果标志还没有设置,则再次推送自己创建的事件。没用。
然后,我尝试使用带有标志的
SDL_WINDOWEVENT_EXPOSED
和 SDL_WINDOWEVENT_FOCUS_GAINED
。像这样的东西:
GameMemory->starttime = SDL_GetTicks();
while(SDL_PollEvent(&GameMemory->event))
{
// Handle Events.
switch(GameMemory->event.window.event)
{
case(SDL_WINDOWEVENT_EXPOSED):
{
if(GameMemory->isBooting)
{
GameMemory->isBooting = false;
GameMemory->isPaused = false;
}
break;
}
case(SDL_WINDOWEVENT_FOCUS_GAINED):
{
if(GameMemory->isBooting == false)
{
GameMemory->isPaused = false;
SDL_ShowCursor(false);
}
break;
}
case(SDL_WINDOWEVENT_FOCUS_LOST):
{
if(GameMemory->isBooting == false)
{
GameMemory->isPaused = true;
SDL_ShowCursor(true);
}
break;
}
default:
break;
}
}
也没有用。
我不知道你在哪里切换到全屏模式,但你应该能够在将模式设置为全屏之前暂停游戏时间,然后在以下时间恢复游戏时间:
GameMemory->isPaused = true;
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
GameMemory->isPaused = false;