2017-09-12 18 views
0

私はSFMLを使って簡単なゲームを作成しています。私は、プレイ、スコア、および終了ボタンを持つメインメニューを完了しました。 グラフィック部分を作成し、キーボードからの入力を処理するクラスMainMenuがあります。SFMLゲームメニュー選択スイッチ

void MainMenu::InputHandler(sf::RenderWindow & window) 
{ 
    int selected= 0; 
    std::cout << selected; 
    sf::Event event; 

while (window.pollEvent(event)) 
{ 
    switch (event.type) 
    { 

    case sf::Event::Closed: 
     window.close(); 
     break; 

    case sf::Event::KeyPressed: 

     switch (event.key.code) 
      { 
       if (selected>= 0 && selected<= 3) 
       { 
        case sf::Keyboard::S: 
         selected++; 
         std::cout << selected; 
         break; 

        case sf::Keyboard::W: 
         selected--; 
         std::cout << selected; 
         break; 
       } 
      } 
     break; 
    } 
} 

私はGame.cppクラスで私のgameLoop()関数内でこのメソッドを呼び出します。

enter image description here: 私の問題は、私はオプション1を選択するためのメニューオプションをスクロールダウンして「S」キーを押すと、選択したオプションは、ショー下の画像では、コンソールにouptutとして、すぐに戻ってオプションを0にするということです

私は間違っていますか?

+0

入力ハンドラを呼び出したときにint = 0が選択されている可能性があります。 –

+0

私はそれを初期化する必要があります。そのため、selected = 0を設定します。 – Koosshh56

+0

Ok、およびindexSelectionはどこに割り当てられていますか? –

答えて

0

説明したように、int selected=0;をクラスコンストラクタに移動して、MainMenuオブジェクトの初期化をゲームループから外してください。

switchステートメント内のifステートメントには決して達しません。

switch (event.type){ 
    case sf::Event::Closed: 
     window.close(); 
     break; 

    case sf::Event::KeyPressed: 
     switch (event.key.code){ 
      case sf::Keyboard::S: 
      if (selected<3) selected++; 
      std::cout << selected; 
      break; 

      case sf::Keyboard::W: 
      if (selected>0) selected--; 
      std::cout << selected; 
      break; 
      } 
     break; 
     } 
    }