SDL:Window 冻结
SDL: Window freezes
我想开始使用 SDL。我得到了一个示例代码,看看它是否工作正常。编译时我没有得到任何错误,但是当我 运行 它出现时 window 但程序冻结直到延迟时间结束。
我是新手,所以非常感谢您的帮助。
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = 0;
window = SDL_CreateWindow("Hello World!",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640, 480,
SDL_WINDOW_SHOWN);
SDL_Delay(10000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
如@HolyBlackCat 所述,您需要一个事件循环:
https://wiki.libsdl.org/SDL_PollEvent
它应该看起来像这样:
while (true) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
}
/* do some other stuff here -- draw your app, etc. */
}
编辑
您将需要用事件循环替换延迟。
相反,您可以在发生事件时关闭应用程序。您 can/should 至少需要处理 SDL_QUIT 事件,该事件在用户尝试关闭 window:
时发送
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
//User requests quit
if( event.type == SDL_QUIT )
quit = true;
}
/* do some other stuff here -- draw your app, etc. */
}
我想开始使用 SDL。我得到了一个示例代码,看看它是否工作正常。编译时我没有得到任何错误,但是当我 运行 它出现时 window 但程序冻结直到延迟时间结束。 我是新手,所以非常感谢您的帮助。
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = 0;
window = SDL_CreateWindow("Hello World!",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640, 480,
SDL_WINDOW_SHOWN);
SDL_Delay(10000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
如@HolyBlackCat 所述,您需要一个事件循环: https://wiki.libsdl.org/SDL_PollEvent
它应该看起来像这样:
while (true) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
}
/* do some other stuff here -- draw your app, etc. */
}
编辑
您将需要用事件循环替换延迟。
相反,您可以在发生事件时关闭应用程序。您 can/should 至少需要处理 SDL_QUIT 事件,该事件在用户尝试关闭 window:
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* handle your event here */
//User requests quit
if( event.type == SDL_QUIT )
quit = true;
}
/* do some other stuff here -- draw your app, etc. */
}