[gelöst]SFML 2.0: Mehrere Tasteneingaben gleichzeitig



  • Hallo Community,
    wie der Titel schon andeutet suche ich nach einer Möglichkeit mehrere gedrückte Tasten gleichzeitig zu verarbeiten.
    Eine ähnliche Frage wurde schon mal gestellt, allerdings für SFML Version 1.6.
    Ich dachte man könnte das Problem vielleicht so lösen, indem man zwei Threads erstellt, die dann beide auf Eingaben warten, allerdings müssten die sich dann irgendwie absprechen, damit nicht beide die gleiche Taste weitergeben.
    Oder geht das irgendwie mit sf:: event::KeyPressed ?

    Ich steh gerade irgendwie auf der Leitung. Könnt ihr mir da vielleicht helfen?

    Mit freundlichen Grüßen,
    Thronx


  • Mod

    2s googlen sagt
    sf::Keyboard::isKeyPressed(...)
    sagt den key status

    if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)&&sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
    {
    ...
    }
    

    wo genau war das problem? was willst du da mit threads?



  • Hallo rapso,
    danke für deine Antwort,
    Ich hab mein Problem falsch geschildert. 🙄
    Wenn man zum Beispiel ein Jump and Run Spiel als Beispiel nimmt, muss der Sprite sich ja nach links, rechts bewegen und springen können.
    Mein Problem dabei ist, dass wenn ich ihn z.B. gerade nach links bewege und dann Springen drücke und beide Tasten immernoch gedrückt halte, dass er dann nur noch springt und sich nicht mehr nach links bewegt.
    Ich kanns leider nicht gut erklären. 😕

    Ich hab das bis jetzt so gemacht:

    //Eingaben
    		while(Window.pollEvent(Event)){
    
    			switch(Event.key.code){
    
    			case sf::Keyboard::W:
    				//Sprung
    				break;
    
    			case sf::Keyboard::A:
    				//Nach links bewegen
    				break;
    
    			case sf::Keyboard::D:
    				//Nach rechts bewegen
    				break;
    
    				}
    
    		}
    


  • Probier doch erst mal die Variante von rapso.

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
    {
     Player.Move();
    }
    
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
    {
     Player.Jump();
    }
    


  • Danke, an euch beide.

    Komischerweise geht es jetzt. Damit hätte ich nicht gerechnet, ich dachte das muss man viel umständlicher machen. 😮

    Da wäre ich selbst wohl nicht drauf gekommen.

    Nochmals danke. 🙂



  • Thronx schrieb:

    Komischerweise geht es jetzt.

    Was ist daran komisch?
    Rapso fragt halt zustände ab, anstatt irgendwelche einzelnen Tastendrücke zu pollen. Wenn du bei deinem Spiel eine Taste gedrückt hälst, willst du ja nicht zig mal den Tastendruck bekommen wie in nem Text-Editor, sondern in jedem logik-Zyklus abfraben, was gerade gedrückt ist.



  • Danke für deine Erklärung, Dobi,
    jetzt hab ichs verstanden. 🙂


Anmelden zum Antworten