2016-08-02 13 views
2

現在、私はgetch()のような振る舞いをするには、sfmlライブラリを使用しているだけで、キーがそれまでは一時停止しています。これは、イベントループの外部で呼び出されることが予想されることに注意することが重要です。私はそれに似たものを探し回ってみましたが、何も見つけられませんでした。sfmlに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; 
} 

それはほとんどの部分でうまく動作しながら、任意のKeyPressedイベントはイベントウィンドウに行けば、しかし、関数の代わりに呼ばれる前、この関数へのキューがすぐに代わりの終了:それはこのようになりますのために私の現在のコード次のキーボードが押されるまで待つ。私は、この関数を呼び出す前に、ウィンドウのイベントキューをクリアする方法を探してみましたが、それを行うことができるものは見つかりませんでした。

答えて

1

while (win->pollEvent(event)) ;(セミコロンを忘れないでください)は、イベントキューをクリアしますが、それはおそらくあなたがやりたいことではありません。プログラム全体をストールし、入力ロジックをストールすることはまれです。 FSAのいくつかの種類を使用すると良いだろう、と私は信じています。 image

以外にも、あなたのシーンを再描画し、時間からの少なくとも画面をリフレッシュするために、あなたのwhile(true)ループ内でdisplay()を呼び出す必要があります:コイン(あなたがキーを押して待つような)のための機械の待機はウィキペディアから、この例のように時間。

関連する問題