Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SFML事件不显示?_C++_Sfml_Keyboard Events - Fatal编程技术网

C++ SFML事件不显示?

C++ SFML事件不显示?,c++,sfml,keyboard-events,C++,Sfml,Keyboard Events,我的SFML程序中的事件功能不起作用。main()的一般结构如下所示。我想注册最后按下的键并相应地切换屏幕。我知道下面需要重新按下键,但即使这样做作为测试也不起作用 我缺少什么语法?我在论坛上看到的教程和示例代码使它看起来像下面一样简单。我见过在按键密码上使用的开关,但在视频游戏中,这似乎更适用于即时响应 int main() { srand (time(NULL)); sf::RenderWindow window(sf::VideoMode(SIZE, SIZE), "C

我的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;

}
window.pollEvent(event)
应位于while循环中,如下所示:

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


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

我应该如何实现“最后按下一个键”事件?我说的按键按下事件只有在按键保持按下状态时才会运行,对吗?如果需要实时事件,请使用
sf::Keyboard::isKeyPressed(sf::Keyboard::KeyYouNeed)
,但始终需要事件循环。