2017-05-09 2 views
0

Je travaille sur une interface graphique simple, et j'essaie d'utiliser la bibliothèque SDL avec peu de succès. Je développe en langage C, et je ne peux pas passer en C++. J'utilise SDL 2.0.5 sur un poste de travail Linux (Red Hat Enterprise Server 5 (Tikanga)).SDL 2 se bloque lors de l'interrogation des événements

Le problème est que lorsque j'essaie d'attraper des événements, la fenêtre se bloque. Pas de réponse, 100% d'utilisation du processeur, et je dois tuer le processus. Cliquer sur le "x" n'a aucun effet. J'ai écrit un code de test simple pour comprendre le problème, mais je ne sais vraiment pas quoi faire. On dirait que le "printf" interne n'est jamais atteint.

En outre, si je supprime la boucle d'événement, SDL_Quit() est atteint (pas besoin de tuer le processus) et il me donne un "défaut de segmentation".

#include <SDL.h> 
#include <SDL_events.h> 

SDL_Window *mainWin; 
SDL_Event mainEv; 
int quit = 0; 

if(SDL_Init(SDL_INIT_VIDEO) != 0) 
{ 
    printf("Init error.\n"); 
    return(1); 
} 

mainWin = SDL_CreateWindow("Title", 0, 0, 640, 480, 0); 

while(!quit) 
{ 
    while(SDL_PollEvent(&mainEv)) 
    { 
    printf("Event!\n"); 
    switch(mainEv.type) 
    { 
     case SDL_KEYDOWN: 
     quit=1; 
    } 
    } 
} 

SDL_Quit(); 
+0

Vous faites 'quit = 0' mais votre condition de boucle est'! Quit' ce qui signifie que 'quit' doit être non nul pour sortir de la boucle (et fermer la fenêtre). Changer cette ligne à 'quit = 1' semble résoudre le problème. –

+0

Désolé, j'ai fait une erreur lors de la copie du code. Le problème persiste. – AlbyV0D

Répondre

1

Essayez:

#include <SDL2/SDL.h> 
//#include <SDL_events.h> 

int main(void) 
{ SDL_Window *mainWin; 
    ... 
    ... // same up to: 
    ... 
     case SDL_KEYDOWN: 
     quit = 1; 
    ... 
    SDL_Quit(); 
} 

Je collais votre code dans "sdl_t.c", donc avec recompilé:

gcc sdl_t.c `sdl2-config --libs --cflags` -o sdl_t 

je reçois une fenêtre qui apparaît et va loin lorsque vous appuyez sur une touche. Il y a évidemment plus à faire ...

Avez-vous vu ce bon tutoriel?

http://www.willusher.io/pages/sdl2/

+0

Résolu. Votre réponse m'a aidé à découvrir un conflit probable avec différentes versions de la bibliothèque. Je vous remercie. – AlbyV0D