c++ - 获取当前按键的简单方法

标签 c++ windows

我已经开始使用 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/

相关文章:

c++ - ubuntu 上的 opengl 和 SDL 编译

C++ 标准类型扩展

c++ - 为什么函数的地址(地址的低位字)在每次执行中总是相同

linux - CIFS/SMB 写入优化

windows - 如何使用 .bat 脚本关闭窗口?

c++ - C++17中模板参数包的偏序规则

c++ - 在 C++ 帮助中使用 setprecision()

linux - 为什么 Windows 上的 FFTW 比 Linux 上快?

c++ - CBitmap::LoadBitmap() 拒绝加载资源

c++ - 无法从 WindowsXP 上的子文件夹加载库