SDL-Events "richtig" auswerten



  • Ich bin gerade dabei eine wrapper-klasse für sdl zu schreiben,
    und stoße nun auf folgendes problem:

    void user_figure::control() {
    
       SDL_Event event;
       while(SDL_PollEvent(&event) != 0) {
    
          if(event.type == SDL_KEYDOWN) {
    
             if(event.key.keysym.sym == keys.left ) {
                if((next.x -mov.horab)> 0)
                   next.x -= mov.right;
    
             } else if(event.key.keysym.sym == keys.right) {
                if((next.x + image->w + mov.horab) < surface->w)
                   next.x += mov.right;
    
             } else if(event.key.keysym.sym == keys.up) {
                if((next.y - mov.vertab) > 0)
                   next.y -= mov.up;
    
             } else if(event.key.keysym.sym == keys.down) {
                if((next.y + image->h + mov.vertab) < surface->h)
                   next.y += mov.up;
    
             } else if(event.key.keysym.sym == SDLK_ESCAPE) {
                error = true;
          }
       }
    }
    

    Dieser code arbeitet zwar soweit einwandfrei, jedoch nur jeweils für ein objekt!
    Ich muss diese funktion also dazu bringen nur seine eigenen events auszuwerten und den rest in der (ich glaube) fifo zu belassen.

    Wie stelle ich das am besten an? Ich ahbe bereits mehrere Lösungsansätze von dennen jedoch keine richtig funktioniert hat, vll. weis jemand wie man diese am besten im detail umsetzt.
    1. Ich benutze eine Art Filter für meine eigenen elemente,
    der sämtliche andere events in der fofo lässt.
    2. Ich arbeite mit SDL_PushEvent() und werfe die falschen events wieder in
    die fifo zurück, wobei ich hier eine art stoppmarke bräuchte da ich
    sonst einen endlosloop erhalte

    Kennt jemand die beste möglichkeit?
    Ziel ist es am ende 2 objekte unabhänigvoneinander steuern zu können, ohne das ich dabei bei einem falschen tastendruck einen endlossloop auslöse!

    Ich hoffe ihr könnt mir helfen.



  • Uint8 *keystate = SDL_GetKeyState(NULL);
    

    prufen ob tasten gedrückt sind geht so

    if( keystate[SDLK_UP] ) {
    // Tu was
    }
    


  • KingOfTheBlueMouse schrieb:

    Uint8 *keystate = SDL_GetKeyState(NULL);
    

    prufen ob tasten gedrückt sind geht so

    if( keystate[SDLK_UP] ) {
    // Tu was
    }
    

    Soweit ich mich noch entsinne kann man beides machen:P
    Aber mit diesem Codeblock kann man feststellen, ob eine Taste immer noch gedrückt ist.

    Uint8 *keystate = SDL_GetKeyState(NULL);
    if( keystate[SDLK_UP] ) {
    // Tu was
    }
    

    Das andere schickt nur beim Dücken/Loslassen eine Nachricht und dann nicht mehr...


Anmelden zum Antworten