我有一个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渲染吗?
答案 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;
}
你会发现在窗口区域内滚动/移动的鼠标越多,程序退出的延迟就越多。
希望有所帮助。
干杯。