2009-11-15 52 views
0

我有一个应该处理SDL事件队列中的任何事件的通用函数。到目前为止,功能如下:SDL_Event.type在查询后总是为空

int eventhandler(void* args){ 
    cout << "Eventhandler started.\n"; 
    while (!quit){ 
    while (SDL_PollEvent(&event)){ 
     cout << "Got event to handle: " << event.type << "\n"; 
     switch (event.type){ 
     SDL_KEYDOWN: 
      keyDownHandler(event.key.keysym.sym); 
      break; 
     default: 
      break; 
     } 
    } 
    } 
} 

然而,当我测试的功能,我收到了一大堆的事件,但他们都不似乎有一个类型。它甚至不打印0或任何东西 - 什么都没有。按任意键时的输出如下所示:

Got event to handle: 

而没有别的。任何教程和SDL文档都会说我应该处理这样的事件,但它不起作用。任何人都有这个问题或解决方案?

顺便说一下,事件处理程序在SDL_Thread中运行,但我不认为这是问题所在。

+2

'SDL_KEYDOWN:'应该是'case SDL_KEYDOWN:'。 – 2009-11-15 05:15:25

+0

@gf:你说得对,谢谢。奇怪的是,它也解决了它。 event.type仍然是空的,但*以某种方式*它的作品。谢谢。 – 2009-11-15 05:36:23

+0

我猜你不是通过MS Visual C++编译的,而是使用“event”的一个小心词。它实际上是VC++中的关键字,为了兼容性,我会将其更改为“e”或以前的任何内容。你可能有一天会希望使用VC++,或者其他人可能想通过它来查看你的工作。毕竟这是一个非常常用的编译器。 – Zoomulator 2009-12-08 12:50:20

回答

1

没有任何反应是在SDL_KEYDOWN前丢失的case的结果。
由于case缺少,编译器会看到您将用于goto SDL_KEYDOWN;,这导致default标签是switch语句中的唯一标签。

我不明白为什么event.type没有得到输出,除非你在某处设置了一些流标志。
event.typeUint8哪个SDL只是从整型类型中定义的,所以它应该像一个一样处理。像任何整数类型它也不能是“空”,但它的输出可以。