2017-09-12 10 views
0

Ich erstelle ein einfaches Spiel mit SFML. Ich habe ein Hauptmenü mit den Tasten Play, Scores und Exit gemacht. Ich habe eine Klasse MainMenu, die den grafischen Teil erstellt und die Eingabe von der Tastatur verarbeitet.SFML Game Menu Auswahlschalter

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; 
    } 
} 

Ich nenne diese Methode in meiner gameLoop() Funktion in Game.cpp Klasse. Mein Problem ist, dass, wenn ich drücken ‚s‘ die Menüoption nach unten zu scrollen, um die Option 1, kommt die ausgewählten Optionen zurück zur Option 0 sofort, wie die ouptut an die Konsole im Bild unten zeigt:

enter image description here

Was mache ich falsch?

+0

Vielleicht, weil Sie int ausgewählt haben = 0, wenn Sie den Eingabehandler aufrufen? –

+0

Ich muss es initialisieren, deshalb setze ich selected = 0 – Koosshh56

+0

Ok, und wo ist indexSelection zugewiesen? –

Antwort

0

Wie bereits erwähnt, müssen Sie int selected=0; in den Klassenkonstruktor verschieben und die Initialisierung des MainMenu-Objekts aus der Spielschleife entfernen.

Auch die if-Anweisung in der switch-Anweisung wird nie erreicht werden. Es ist besser, etwas wie dieses zu schreiben: