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()。我最终将其更改为某个任意名称并解决了我的问题!
我目前正在使用 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()。我最终将其更改为某个任意名称并解决了我的问题!