尝试弄清楚如何使用按钮关闭窗口,在这种情况下是“Esc&#39”按钮。在我的第一种方法中,我试着这样做:
if (sf::event.type == sf::Keyboard::Escape)
window.close();
结果并不好,看起来我的程序注意到我按下Escape按钮。所以我尝试了这个approuch:
if (sf::event.type == sf::Keyboard::isKeyPressed(sf::Keyboard::Esc))
window.close();
那也不起作用,就在我要问这里之前,我发现这条线实际上有效(你实际上处理事件后感觉不对吗?)
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Esc))
window.close();
我的问题是;什么是正确的方法呢?如果像我先做的那样写作,为什么不这样做呢?似乎'根据YouTube视频,第一种和第二种方法有效。但是在SFML 2.0和前进中,只有最后一个。是这样的吗?
答案 0 :(得分:4)
前两个不起作用,因为你只是在猜测。检查包括检查事件类型,然后检查密钥代码:
if (event.type == sf::Event::KeyPressed)
if (event.key.code == sf::Keyboard::Escape)
window.close();
你写的第二个随机码:
sf::event.type == sf::Keyboard::isKeyPressed(sf::Keyboard::Esc)
sf::Keyboard::isKeyPressed
返回bool
,而sf::event.type
此时不是1
,即sf::Event::Resized
(除非您按住密钥并调整窗口大小)。
到最后一个代码示例:
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Esc))
window.close();
这也是一种可行的方式。如果将其置于sf::Window::pollEvent
成功的条件下,它将关闭您的窗口。但它通常在外面,sf::Keyboard
可以更容易地在游戏中实现角色移动。
答案 1 :(得分:2)
正如之前提到的LogicStuff, 这样做 - :
if(window.event.type == sf::Event::KeyPressed)
if(event.key.code == sf::Keyboard::Escape)
window.close();
SFML遵循此方法,以便将类似类型的事件组合在一起。它起初可能看起来不直观,但它的存在使代码的可读性增加。并始终查看官方文档。他们真的很棒。(与我必须使用的一些工具相比,还不错。:))
答案 2 :(得分:1)
这对我有用:
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
else if(event.type == sf::Event::KeyPressed)
{
if(event.key.code == sf::Keyboard::Key::Escape)
window.close();
// ... etc ...
}
}