2009-11-15 5 views
0

J'ai une fonction générale qui est censée gérer n'importe quel événement dans la file d'attente d'événements SDL. Jusqu'à présent, la fonction ressemble à ceci:SDL_Event.type toujours vide après l'interrogation

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; 
     } 
    } 
    } 
} 

Cependant, quand je teste la fonction, je reçois un tas d'événements, mais aucun d'entre eux semblent avoir un type. Il n'imprime même pas 0 ou quoi que ce soit - juste rien. La sortie lorsque vous appuyez sur une touche ressemble à ceci:

Got event to handle: 

Et rien d'autre. Tout didacticiel et les documents SDL disent que je devrais gérer des événements comme celui-ci, mais cela ne fonctionne pas. Quelqu'un d'autre a ce problème ou une solution? À propos, l'eventhandler s'exécute dans un SDL_Thread, mais je ne pense pas que ce soit le problème.

+2

'SDL_KEYDOWN:' devrait être 'cas SDL_KEYDOWN:'. –

+0

@gf: Vous avez raison, merci. Assez curieusement cela l'a résolu aussi. Le event.type est toujours vide mais * en quelque sorte * cela fonctionne. Merci. –

+0

Je suppose que vous ne compilez pas à travers MS Visual C++, mais un mot d'avertissement sur l'utilisation de "événement". C'est en fait un mot-clé dans VC++, et je le changerais en "e" ou quoi que ce soit, pour des raisons de compatibilité. Vous pourriez un jour souhaiter utiliser VC++, ou quelqu'un d'autre pourrait vouloir voir votre travail à travers elle. C'est un compilateur très utilisé après tout. – Zoomulator

Répondre

1

Que rien ne se produit est le résultat de case manquant devant SDL_KEYDOWN.
Avec case manquant le compilateur voit une étiquette de saut que vous utiliseriez pour, par exemple. goto SDL_KEYDOWN;, ce qui entraîne l'étiquette default étant la seule étiquette dans l'instruction switch.

Je ne vois pas pourquoi event.type n'obtient pas de sortie à moins que vous ne définissiez des indicateurs de flux quelque part.
event.type est un Uint8 dont SDL vient de typedefs de types entiers, donc il devrait être manipulé comme un. Comme tout type intégral, il ne peut pas être "vide", mais la sortie pour cela peut être.

Questions connexes