SFML事件未显示?

时间:2015-08-07 02:51:31

标签: c++ sfml keyboard-events

我的SFML程序中的事件功能无效。 main()的一般结构如下。我想注册最后一个按键并相应地切换屏幕。我知道下面会要求密钥保持压缩,但即使这样做也不能正常工作。

我错过了什么语法?我在论坛上看到的教程和示例代码使它看起来像下面一样简单。我已经看到在密码代码上使用了交换机,但这似乎更像是视频游戏中的即时响应。

int main()
{

    srand (time(NULL));

    sf::RenderWindow window(sf::VideoMode(SIZE, SIZE), "Curling Party");

    window.setFramerateLimit(30);

   ...

    while(window.isOpen())
    {

        sf::Event event;

        window.pollEvent(event);

        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Q)

        {

            window.close();
            break;
        }

        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::R)

        {


            ...

            window.display();

        }


        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::B)

        {

            ...

            window.display();

        }

        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
        {
           ...
        }


        window.clear(sf::Color::White);

        window.draw(house[0]);
        window.draw(house[1]);
        window.draw(house[2]);
        window.draw(house[3]);

        window.display();

    }

    return 0;

}

1 个答案:

答案 0 :(得分:2)

window.pollEvent(event)应该在documentation says

的while循环中
  

人们经常犯的错误是忘记事件循环,仅仅因为他们还不关心处理事件(他们使用实时输入)。如果没有事件循环,窗口将无响应。重要的是要注意事件循环有两个角色:除了向用户提供事件之外,它还为窗口提供了处理其内部事件的机会,这是必需的,以便它可以对移动或调整用户操作做出反应。

只应在窗口循环结束时调用Altought window.display(),在按下每个键后不需要显示窗口。