正如手册所说,函数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;
}
Run Code Online (Sandbox Code Playgroud)
这个代码应该做的是打开一个新窗口,并在每次按下一个键时在控制台中打印"Hello".这段代码可以很好地测试,SDL_PollEvent(&e)!=0但是SDL_KEYDOWN当我使用测试时它不会读取事件!SDL_PollEvent(&e)(但它会在while中输入并处理SDL_QUIT事件而没有任何问题).
为什么会这样?
while (!SDL_PollEvent(&e))
Run Code Online (Sandbox Code Playgroud)
需要是:
while (SDL_PollEvent(&e))
Run Code Online (Sandbox Code Playgroud)
如果它应该是相同的 SDL_PollEvent(&e) != 0
因为!SDL_PollEvent(&e)和呼叫一样while(0)