我已经开始使用 SFML 作为我正在使用的代码编辑器的基本图形框架,唯一似乎无法完全正确的是键盘输入。
我在 QB64(一种类似于 Visual Basic 的语言)中习惯使用 _keyhit 命令(返回虚拟键码)或 inkey$ 命令(直接返回当前按键的字符)来获取按键).我正在寻找 C++ 中的类似解决方案(不一定是跨平台的,可能很容易与 SFML 一起实现)
我现在尝试的是使用 _getch,它似乎不适用于 Windows 框架,也不适用于 SFML,也许我应该为此目的使用一些 Windows.h 例程,但从我已经看到,那些检查特定的按键,而不是我所需要的。 SFML 框架提供了“sf::Keyboard::isKeyPressed”,但它也检查特定的按键,但不检查整个键盘,我还尝试创建一个数组作为“sf::Keyboard: :Key"enum 到 ASCII 字符,但它并不令人信服,此外,按键似乎“粘住”并且即使在释放后按下的键的字符也会继续读取。
最佳答案
如果您使用的是 SFML,其实很简单。您需要使用 sf::Event::KeyEvent 类(或在本例中为结构)。
https://www.sfml-dev.org/documentation/2.5.0/structsf_1_1Event_1_1KeyEvent.php
尽管要注意的是您必须从某物中获取事件。通常这在 SFML 窗口中使用。
//assuming your code is already set up for these items...
sf::Event Event;
while (window.GetEvent(Event))
{
if (Event.Type == sf::Event::KeyPressed)
{
//to get the key code, use Event.Key.Code
//your code
//for example
switch(Event.KeyEvent.Code)
{
case(sf::Keyboard::Key::Y):
//do stuff
break;
}
}
}
注意,自从我使用 SFML 以来已经有一段时间了,所以我不能 100% 确定它是否适用于 switch 语句。在 if-else if-else
语句中,与 ==
进行比较也可以。
可能还有其他方法可以在没有窗口的情况下获取定义的 sf::Event
。
否则,它相当简单。
关于c++ - 获取当前按键的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51182609/