将窗口设置为全屏会导致延迟

问题描述 投票:0回答:1

我正在制作一个简单的游戏,我想将主窗口设置为全屏模式。我使用

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;
   }
}

也没有用。

c++ sdl-2
1个回答
0
投票

我不知道你在哪里切换到全屏模式,但你应该能够在将模式设置为全屏之前暂停游戏时间,然后在以下时间恢复游戏时间:

GameMemory->isPaused  = true;
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
GameMemory->isPaused  = false;
© www.soinside.com 2019 - 2024. All rights reserved.