2017-05-09 4 views
0

Ich arbeite an einer einfachen GUI, und ich versuche, die SDL-Bibliothek mit wenig Erfolg zu verwenden. Ich entwickle in C Sprache, und ich kann nicht zu C++ wechseln. Ich verwende SDL 2.0.5 auf einer Linux-Workstation (Red Hat Enterprise Server 5 (Tikanga)).SDL 2 hängt beim Abrufen von Ereignissen

Das Problem ist, dass das Fenster hängt, wenn ich versuche, Ereignisse abzufangen. Keine Antwort, 100% CPU-Auslastung, und ich muss den Prozess beenden. Ein Klick auf das "x" hat keine Wirkung. Ich habe einen einfachen Testcode geschrieben, um das Problem herauszufinden, aber ich weiß wirklich nicht, was ich tun soll. Es sieht aus wie der innere "printf", den es nie erreicht hat.

Auch wenn ich die Ereignisschleife entfernen, SDL_Quit() ist erreicht (keine Notwendigkeit, den Prozess zu beenden) und es gibt mir einen "Segmentierung Fehler".

#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

Sie tun 'beenden = 0 'aber Ihre Schleifenbedingung ist'! Quit' was bedeutet, dass 'quit' hat nicht Null sein, um die Schleife zu verlassen (und schließen Sie das Fenster). Wenn Sie diese Zeile auf "quit = 1" ändern, scheint das Problem zu lösen. –

+0

Leider habe ich beim Kopieren des Codes einen Fehler gemacht. Das Problem besteht weiterhin. – AlbyV0D

Antwort

1

Versuchen:

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

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

ich Ihren Code in "sdl_t.c" eingefügt, kompiliert es so mit:

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

ich dann ein Fenster, das erscheint und geht weg, wenn Sie eine Taste drücken. Es gibt offensichtlich mehr zu tun ...

Haben Sie dieses gute Tutorial gesehen?

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

+0

Gelöst. Ihre Antwort hat mir geholfen, einen möglichen Konflikt mit verschiedenen Bibliotheksversionen zu entdecken. Vielen Dank. – AlbyV0D

Verwandte Themen