SDL窗口未正确关闭

时间:2016-01-23 11:33:39

标签: c events sdl

我有一个SDL窗口,按下十字架需要一段时间才能关闭。我已经在事件循环中发生了事情,所以我认为它可能与此有关。我有一个类似的SDL窗口,它立即关闭,但它在事件循环期间没有做任何事情,只检查十字架。

我的事件循环代码是:

while(event.type != SDL_QUIT){
  while(SDL_PollEvent(&event) != 0){
     if (event.type == SDL_QUIT){
        SDL_Quit();
        exit(1);
     }
     flashingText(data, fontdata, display, text);
  }
  SDL_Delay(100);
}

flashingText函数中有一些SDL延迟和SDL渲染吗?

1 个答案:

答案 0 :(得分:0)

发生延迟是因为flashingText()被调用每个事件,并且窗口内的鼠标移动越多,循环触发和轮询的事件就越多。考虑这段代码(使用上面的事件轮询);

#include <SDL2/SDL.h>
#include <iostream>

int main()
{    
        SDL_Window* window;
        SDL_Renderer* renderer;

        // Initialize SDL.
        if (SDL_Init(SDL_INIT_VIDEO) < 0)
                return 1;

        window = SDL_CreateWindow("SDL_RenderClear",
                        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                        512, 512,
                        0);

        renderer = SDL_CreateRenderer(window, -1, 0);
        SDL_SetRenderDrawColor(renderer, 255, 128, 128, 255);
        SDL_RenderClear(renderer);

  // OP's code starts
  SDL_Event event;
  while(event.type != SDL_QUIT){
    while(SDL_PollEvent(&event)){
       if (event.type == SDL_QUIT){
          SDL_Quit();
          exit(1);
       }
          SDL_RenderPresent(renderer);
          // to simulate OP's flashingText()
          SDL_Delay(50);            
    }
    SDL_Delay(100);
  }
  // OP's code ends

  return 0;
}

你会发现在窗口区域内滚动/移动的鼠标越多,程序退出的延迟就越多。

希望有所帮助。

干杯。