Frage von TheMusicBoy, 30

C++ Tastendruck nicht durchgängig?

Hey Leute,

ich arbeite derzeit in C++ mit der SFML an einem Programm, und möchte dazu ein Quadrat mit den Maustasten bewegen. Die Bewegung an sich funktioniert soweit, nur stört mich daran etwas: Wenn man die Taste gedrückt hält, soll das Quadrat permanent laufen, aber das tut es nicht von anfang an. Es verhält sich so, als würde man eine Taste in z.B. Word gedrückt halten: Es bewegt sich ein bisschen, dann macht es etwa 1 Sekunde Pause, dann bewegt es sich permanent.

Wie kann man dieser verzögerung entgegenkommen?

Code:

if (event.type == sf::Event::KeyPressed) {

            if (event.key.code == 71) {
                square.move(sf::Vector2f(-10, 0));
            }

            if (event.key.code == 72) {
                square.move(sf::Vector2f(10, 0));
            }

            if  (event.key.code == 73) {
                square.move(sf::Vector2f(0, -10));
            }

            if (event.key.code == 74) {
                square.move(sf::Vector2f(0, 10));
            }
 }

PS: Das ändern von "square.move(sf::Vector2f(x, y))" zu "square.move(x.f, y.f)" hat nicht geholfen.

Antwort
von ByteJunkey, 18

Zeig mal bitte deine Eventschleife

Kommentar von TheMusicBoy ,
sf::Event event;

while (window.pollEvent(event)){ 
 if (event.type == sf::Event::Closed)

window.close();

if (event.type == sf::Event::KeyPressed) {

if (event.key.code == 71) {
square.move(sf::Vector2f(-10, 0));
}

if (event.key.code == 72) {
square.move(sf::Vector2f(10, 0));
}

if (event.key.code == 73) {
square.move(sf::Vector2f(0, -10));
}

if (event.key.code == 74) {
square.move(sf::Vector2f(0, 10));
}

if (event.key.code == 57) {
...Sprungparabel berechnen...
}
}
Kommentar von ByteJunkey ,

ich mache es immer so:

while (window.pollEvent(event))
{
   //das übliche, um das Fenster zu schließen
   if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)
      object.move(v.x, v.y)
}

Keine passende Antwort gefunden?

Fragen Sie die Community