SDL: 窗口卡死

3

我想开始学习SDL。我获取了一个示例代码来测试它是否正常工作。编译时没有错误,但是运行时程序会冻结直到延迟结束,窗口才会显示出来。由于我是新手,所以非常需要帮助。

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;

}


6
你缺少一个事件循环。你的教程应该涵盖这个内容。 - HolyBlackCat
请添加一个链接来解释什么是SDL。(https://wiki.libsdl.org/SDL_Init) - Michael Haephrati
1
@MichaelHaephrati 我不明白为什么我们需要一个链接。已经有一个标签,解释了SDL是什么。 - underscore_d
@underscore_d 这只是我的个人意见。如果您将单词SDL作为链接,就可以避免与MFC / SDL / MDL(https://www.libsdl.org/tmp/SDL/VisualC.html)混淆,但由于有标签存在,这并不是强制性的。 - Michael Haephrati
"我得到了一个示例代码。你是从教程中获取的吗?还是你自己编写的?如果问题确实如人们所说,那么教程不应该将其作为示例代码提供。" - underscore_d
1个回答

5

正如@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. */
}

编辑
您需要将延迟替换为事件循环。 相反,您可以在事件上关闭应用程序。最少您可以/应该做的是处理SDL_QUIT事件,当用户尝试关闭窗口时会发送该事件:

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. */
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接