【问题标题】:SFML Game Menu selection switchSFML 游戏菜单选择开关
【发布时间】:2018-02-21 07:26:03
【问题描述】:

我正在使用 SFML 创建一个简单的游戏。我已经完成了一个带有播放、分数和退出按钮的主菜单。 我有一个类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 类的gameLoop() 函数中调用此方法。 我的问题是,如果我按“s”向下滚动菜单选项以选择选项 1,所选选项会立即返回选项 0,如下图控制台的输出所示:

我做错了什么?

【问题讨论】:

  • 可能是因为调用输入处理程序时 int selected= 0?
  • 我必须初始化它,这就是为什么我把 selected = 0
  • 好的,indexSelection 分配在哪里?
  • 打错字了,抱歉。现已编辑
  • 但是,当您写int selected= 0; std::cout &lt;&lt; selected; 时,您期望什么?

标签: c++ sfml


【解决方案1】:

如前所述,您需要将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;
      }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多