2016-08-02 18 views
2

Derzeit versuche ich eine Funktion zu erstellen, die sich wie getch() (Pausen, bis ein Schlüssel es ist) nur mit der sfml-Bibliothek verhält. Es ist wichtig zu beachten, dass dies außerhalb der Ereignisschleife erwartet wird. Ich habe versucht, nach etwas anderem zu suchen und habe nichts gefunden. Mein aktueller Code dafür sieht wie folgt aus:Gibt es in sfml ein Äquivalent von getch?

int waitForKeyboardHit (sf::Window *win) { 
    sf::Event event; 
    while (true) { 
     while (win->pollEvent (event)) { 
      if (event.type == sf::Event::KeyPressed) { 
       return event.key.code; 
      } 
     } 
    } 
    return -1; 
} 

während die zum größten Teil gut funktioniert, aber wenn irgendwelche KeyPressed Ereignisse gehen auf das Ereignis Fenster Warteschlange vor dieser Funktion sofort anstelle der Funktion aufgerufen wird, endet statt Warten bis zum nächsten Tastendruck. Ich habe versucht, nach Möglichkeiten zu suchen, um die Ereigniswarteschlange des Fensters zu löschen, bevor ich diese Funktion aufruft, aber ich habe auch nichts gefunden, was das tun könnte.

Antwort

1

while (win->pollEvent(event)) ; (beachten Sie das Semikolon) wird die Ereigniswarteschlange löschen, aber das ist wahrscheinlich nicht, wie Sie es tun möchten: das ganze Programm und seine Logik für die Eingabe ist selten eine gute Sache. Mit einer Art von FSA wäre besser, glaube ich. Wie in diesem Beispiel aus Wikipedia, wo die Maschine wartet auf eine Münze (wie Sie auf einen Tastendruck warten): image

Außerdem sollten Sie Ihre Szene neu zu zeichnen und display() in Ihrer while(true) Schleife rufen Sie den Bildschirm zumindest von Zeit zu aktualisieren, um Zeit.