SDL_PollEvent() 循环未执行。是否没有事件正在排队?

SDL_PollEvent() loop is not executing. Are no events being queued?

我目前正在使用 C 和 gcc 编译器 来处理 SDL2。我已经设法让图像在 2 秒后自动加载和关闭,但现在我想等到用户按下顶部的 X 按钮,或者让用户按下 ESC键。

然而,在几个打印语句显示一切正常但我的 SDL_PollEvent() 循环之后,我想知道是否有任何事件正在排队。当我 运行 我的程序时,我的图像显示在屏幕上,程序等待我的输入。我疯狂地敲击键盘上的任何键以得到响应,但没有任何反应。应该发生的是一条消息说 "You pressed something!"

然后我尝试单击 window 顶部的 X,但没有任何反应。我退出程序的唯一方法是在终端中按 CTRL+C

这是我的一段事件循环代码:

/* Handle events on queue */
while(SDL_PollEvent(&e) != 0)
{
    /* This print statement does not execute */
    printf("Handling events!\n");

    /* User quits */
    switch(e.type)
    {
        case SDL_KEYDOWN:
            switch(e.key.keysym.sym)
            {
                case SDLK_ESCAPE:
                    printf("Escape pressed!\n");
                    quit = true;
                    break;

                default: printf("You pressed something!");
            }

        case SDL_QUIT:
            quit = true;
            break;

        default: printf("Print anything!\n");
    }
}

确保您在游戏循环中调用 SDL_PollEvent 循环。 SDL_PollEvent 不会阻塞等待事件,因此您需要在每一帧继续调用它,直到有一些事件需要处理。

除此之外,您的代码看起来还不错。

我很欣赏到目前为止的建议,但没有任何效果的真正原因是我的清理函数被调用了 close()。我最终将其更改为某个任意名称并解决了我的问题!