C++ SFML事件不显示?
我的SFML程序中的事件功能不起作用。main()的一般结构如下所示。我想注册最后按下的键并相应地切换屏幕。我知道下面需要重新按下键,但即使这样做作为测试也不起作用 我缺少什么语法?我在论坛上看到的教程和示例代码使它看起来像下面一样简单。我见过在按键密码上使用的开关,但在视频游戏中,这似乎更适用于即时响应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
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)
,但始终需要事件循环。