sfml keyboard



  • hey

    mir ist aufgefallen, dass sowohl die key-down-events als auch sf::keyboard keine funktion bieten um den wirklichen zustand einer taste herauszufinden. beide genannten sind abhängig von dieser windows-zeichenwiederhol-funktion (wenn man auf einer taste draufbleibt, muss man kurz warten und dann kommt die taste schnell wiederholt). für mein spiel ist das echt ungünstig. bei winapi gibt es meinem wissen nach getasynckeystate, welches so funktioniert wie man es bei spielen gerne hätte. gibt es sowas auch in sfml? (sf::Keyboard::isKeyPressed ist auch von dieser wiederholungs-funktion abhängig, hab ich getestet)

    gruss



  • asafads schrieb:

    sf::Keyboard::isKeyPressed ist auch von dieser wiederholungs-funktion abhängig, hab ich getestet

    Wie soll es das sein? Es gibt true zurück, wann immer die Taste gedrückt ist -- egal wie lange schon.

    Schau mal in die Doku, sf::Window::setKeyRepeatEnabled()



  • kibord schrieb:

    asafads schrieb:

    sf::Keyboard::isKeyPressed ist auch von dieser wiederholungs-funktion abhängig, hab ich getestet

    Wie soll es das sein? Es gibt true zurück, wann immer die Taste gedrückt ist -- egal wie lange schon.

    also als ich das gestern ausprobiert habe, habe ich auch daten im stil von 100001010101 (das soll der erste anschlag und die pause bis zum schnellen wiederholen repräsentieren) erhalten.

    kibord schrieb:

    Schau mal in die Doku, sf::Window::setKeyRepeatEnabled()

    damit kann ich was anfangen, probiere ich heute abend mal. danke und gruss



  • asafads schrieb:

    also als ich das gestern ausprobiert habe, habe ich auch daten im stil von 100001010101 (das soll der erste anschlag und die pause bis zum schnellen wiederholen repräsentieren) erhalten.

    Das sollte nicht passieren.

    Kannst du das Problem mit folgendem Code reproduzieren? Oder was erhältst du, wenn du eine Zeit lang die Leertaste drückst? Falls es nicht geht, wäre auch OS/Compiler interessant.

    #include <SFML/Window.hpp>
    #include <iostream>
    
    int main()
    {
    	sf::Window window(sf::VideoMode(640, 480), "SFML Application");
    
    	while (window.isOpen())
    	{
    		sf::Event event;
    		while (window.pollEvent(event))
    		{
    			if (event.type == sf::Event::Closed)
    				return 0;
    		}
    
    		std::cout << sf::Keyboard::isKeyPressed(sf::Keyboard::Space);
    		window.display();
    	}
    }
    


  • okay nun - zuhause angekommen und getestet - muss ich gestehen, dass isKeyPressed doch so funktioniert wie ihr beide es sagt, entgegen meinen behauptungen. auch der von dir - Nexus - gepostete code ist nicht so wie ich es in meinem letzten post gesagt habe.

    ich öffnete nun nochmals das projekt von gestern abend wo ich das verhalten bemerkt habe und muss feststellen, dass ich meine if-abfragen (fürs isKeyPressed) im falschen scope waren... 😃
    peinlicher fehler...


Anmelden zum Antworten