我的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;
}
答案 0 :(得分:2)
window.pollEvent(event)
应该在documentation says:
人们经常犯的错误是忘记事件循环,仅仅因为他们还不关心处理事件(他们使用实时输入)。如果没有事件循环,窗口将无响应。重要的是要注意事件循环有两个角色:除了向用户提供事件之外,它还为窗口提供了处理其内部事件的机会,这是必需的,以便它可以对移动或调整用户操作做出反应。
只应在窗口循环结束时调用Altought window.display()
,在按下每个键后不需要显示窗口。