2015-07-03 76 views
-1

我无法让SDL等待事件。当我尝试在窗口上短暂闪烁然后消失时,我的IDE中没有任何错误或任何错误,生成日志中也没有任何错误。我看着lazyfoo和SDL wiki,但没有帮助。我使用的代码块和SDL 2.0.3以下是我到目前为止:SDL 2.0.3事件循环不起作用

while(&event != NULL && !quit) 
{ 
    while(SDL_PollEvent(&event) > 0) 
    { 
     if(event.type == SDL_QUIT) 
     { 
      quit = true; 
     } 
     else 
     { 
      if(event.type == SDL_KEYDOWN) 
      { 
       switch(event.key.keysym.sym) 
       { 
        case SDLK_LEFT: 
         currentSurface = keyPressSurfaces[KEY_PRESS_LEFT]; 
         break; 
        case SDLK_UP: 
         currentSurface = keyPressSurfaces[KEY_PRESS_UP]; 
         break; 
        case SDLK_RIGHT: 
         currentSurface = keyPressSurfaces[KEY_PRESS_RIGHT]; 
         break; 
        case SDLK_DOWN: 
         currentSurface = keyPressSurfaces[KEY_PRESS_DOWN]; 
         break; 
        default: 
         currentSurface = keyPressSurfaces[KEY_PRESS_DEFAULT]; 
        break; 
       } 

      } 
     } 
    } 
} 

有什么建议吗?

+6

你是否真的用调试器完成了这一步? – MrEricSir

+0

...或者至少printf-debugging – Drop

+3

请问您可以添加事件声明吗?而'&event!= NULL'没用,你应该删除它。 – Arne

回答

0

你是轮询事件SDL_PollEvent,如果你想等待一个事件,你应该使用SDL_WaitEvent

+0

我得到了相同的结果 – MabogoDoe

0

首先,是quit假你进入这个循环之前?

如果没有要轮询的事件,我认为事件是NULL,导致程序在下次看到while(&event != NULL && !quit)时退出。如果在启动时没有立即发生事件,则可能无法进入该循环。编辑:哎呦 - 认为event是一个指针:

while (SDL_PollEvent(&event))行会通过,直到所有未完成的事件处理循环。即使没有要处理的事件,外部while (!quit)也会使程序保持打开状态。

+0

'&event'是'event'的地址,它永远不会为NULL。 “SDL_PollEvent”的返回值会告诉新事件是否写入了&&event。 – Leiaz

+0

啊 - 哎呀。对不起,我认为这是一个指针,因为他正在对NULL进行检查。在这种情况下,退出必须是错误的,那么,对吧? –

+0

是的。所有的代码也可以在一个永远不会被调用的函数中。提问的方式,没有水晶球就很难回答。 – Leiaz