SDL_PollEvent()循环未执行。没有事件排队吗?

时间:2015-06-11 00:39:21

标签: c sdl-2

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

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

然后我尝试单击窗口顶部的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");
    }
}

2 个答案:

答案 0 :(得分:1)

确保在游戏循环中调用SDL_PollEvent循环。 SDL_PollEvent不会阻止等待事件,所以你需要每帧都一直调用它,直到有一些事件需要处理。

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

答案 1 :(得分:0)

到目前为止,我很欣赏这些建议,但实际上没有任何效果的原因是因为我的清理功能被称为 close()。我最终把它改成了一些任意的名字,这解决了我的问题!