C ++中的许多多媒体库都具有检测键盘状态的功能。但这些功能是有缺陷的,因为它们只检测是否保持了一个键,并发送一个恒定的信号。我想把这样的函数发送一个信号脉冲,只有当按键被按下时,而不是在按下它后按住它。
我做了类似的事(伪代码):
while isKeyPressed { if not isKeyPressed (exit_loop) }
这是无效的,因为即使它有效,也无法测试其他键,而“while”循环正在工作,并且它还会延迟程序持有密钥的时间。
有人能想到更好的选择吗?
(顺便说一句,我使用了SFML的函数sf::Keyboard::isKeyPressed()
)。
答案 0 :(得分:1)
仅仅是因为某些图书馆没有像你想要的那样完全正常工作并不能使它有缺陷。这可能是故意的(如本例所示)。
SFML为您提供两种不同的方法来获取键盘输入(如果您认为sf::Event::TextEntered
事件采用不同的方法,则为三种方法):
当您使用第一种方法时,您实际上想要使用第二种方法:
sf::Event event
while (window.pollEvent(event) {
switch (event.type) {
case sf::Event::KeyPressed:
std::cout << "down: " << event.key.code << std::endl;
break;
case sf::Event::KeyReleased:
std::cout << "up: " << event.key.code << std::endl;
break;
// Don't forget to check for other events here
}
}
正如您所注意到的,这些事件只会在您按下或释放密钥后触发(除非您使用sf::Window::setKeyRepeatEnabled()
更改此行为),这完全符合您的要求。寻找。