【发布时间】:2015-04-17 18:31:45
【问题描述】:
正如手册所说,函数SDL_PollEvent“如果有待处理的事件,则返回 1,如果没有可用的事件,则返回 0。” ,这就是我们使用测试SDL_PollEvent(&e)!=0 的原因(其中e 是SDL_Event)。
但是,如何使用这个测试:!SDL_PollEvent(&e)?它应该可以工作,但显然它会导致一些问题。
这里是代码示例:
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, char* args[]){
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Hello",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, SDL_WINDOW_SHOWN);
SDL_Event e;
int quit=0;
while(!quit){
//Here the test
while (!SDL_PollEvent(&e)){
if (e.type==SDL_QUIT)
quit=1;
else if ( e.type == SDL_KEYDOWN )
printf( "Hello\n" );
}
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
这段代码应该做的是每次按下一个键时打开一个新窗口并在控制台中打印“Hello”。这段代码在测试SDL_PollEvent(&e)!=0 下运行良好,但是当我使用测试!SDL_PollEvent(&e) 时它不会读取SDL_KEYDOWN 事件(但它确实会在一段时间内输入并处理SDL_QUIT 事件而没有任何问题)。
为什么会有这种行为?
【问题讨论】: