Eventbehandlung mit der SDL Bibliothek



  • Hallo,

    ich schreibe grade eine kleine Konsolenanwendung und verwende auch die SDL Bibliothek. Ich wollte diese gerne nutzen, um auf Events wie Keydown zu horchen und darauf zu reagieren. Ich hab die Library wie folgt in meinem Code initialisiert:

    int main(int argc, char** argv) {
    	if (SDL_Init(SDL_INIT_EVENTS) < 0) {
    		std::cerr << "SDL could not initialize an event subsystem. Program  will exit" << std::endl;
    		return false;
    	}
    
    	SDL_Event event;
    	while(true) {
    		while(SDL_PollEvent(&event)) {
    			if (event.type == SDL_KEYDOWN and event.key.keysym.sym == SDLK_UP) {
    				std::cout << "hello world" << std::endl;
    			}
    		}
    	}
    
    	return 0;
    }
    

    Es werden aber keine Events abgefangen. Muss ich dafür bei SDL noch was einstellen, damit der die Tastendrücke abfragen kann, oder geht der Ansatz überhaupt nicht?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Linux/Unix in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    bekommst du garkeine events oder nur keine key events?
    es kann sein dass du noch das fenster updaten musst. (ich kenne mich mit SDL nicht aus, aber ich hab andere libs gesehen die events erst dann in eine interne event queue stecken).



  • Ich bekomme so gut wie keine events. Ich habe meine ausgabe mal aus der If Bedingung rausgenommen. Hab aber beim ausführen auch keine Ausgaben erhalten. Nur wenn ich STRG-C gedrückt hab, wurde der Text ausgegeben.



  • SDL schrieb:

    ich schreibe grade eine kleine Konsolenanwendung

    Du kannst mit SDL die Events für ein von SDL erzeugtes Fenster abfangen, aber für das Fenster einer Konsolenanwendung??

    Guck mal http://stackoverflow.com/questions/2067893/c-console-keyboard-events und https://msdn.microsoft.com/en-us/library/ms682079(VS.85).aspx (wobei da natürlich Essig ist mit Cross-Plattform...)


  • Mod

    hast du ein fenster-update eingebaut?



  • @egal: das es für SDL fenster funktioniert, ist mir bekannt, hatte aber gehofft, dass es auch für die Komandozeile funktioniert. Zur Zeit schaue ich mir grade die ncurses bibliothek an, hatte gehofft diesen weg aber vermeiden zu können.

    @rapso: ähm, nein, ich denke nicht. Ich weiß nicht was du damit meinst, aber mein Code schaut so aus, wie ich ihn im ersten Post angegeben hab. Ich denke mal da ist das nicht dabei. Magst du kurz erklären, was du damit meinst?


  • Mod

    windows schickt events an fenster. du musst mit SDL also vermutlich ein fenster aufmachen an das windows die events schickst und SDL diese abfangen kann und dann mit der funktion an dich weitergibt. das fenster muss dann oefters geupdated werden, weil vermutlich dabei das event processing auf seiten von SDL passiert.

    eine konsole hat keine events (urspruenglich) und ich wuerde vermuten dass SDL das nicht emuliert. in der console brauchst du SDL eigentlich garnicht, weil die standard bibliothek schon tastaturabfragen zurueckgibt z.b.

    std::cin.get();
    

Log in to reply