SFML 游戏菜单选择开关

SFML Game Menu selection switch

我正在使用 SFML 创建一个简单的游戏。我已经完成了一个带有“播放”、“乐谱”和“退出”按钮的主菜单。 我有一个 class MainMenu 创建图形部分并处理来自键盘的输入。

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 class 的 gameLoop() 函数中调用了这个方法。 我的问题是,如果我按 's' 将菜单​​选项向下滚动到 select 选项 1,selected 选项会立即返回到选项 0,因为输出到控制台下图显示:

我做错了什么?

如前所述,您需要将 int selected=0; 移动到 class 构造函数中,并将 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;
      }
    }