获取当前按键的简单方法
Simple way to get the current keypress
我已经开始使用 SFML 作为我正在处理的代码编辑器的基本图形框架,我似乎唯一不能完全正确的事情是键盘输入。
我在QB64(一种类似于Visual Basic的语言(中习惯的是使用_keyhit命令(返回虚拟键码(或inkey$命令(直接返回当前按键的字符(来获取按键。我正在寻找类似的C++解决方案(不一定是跨平台的,可能很容易与 SFML 一起实现(
到目前为止,我尝试的是使用_getch,它似乎不适用于Windows框架,也不适用于SFML,也许我应该为此目的使用一些Windows.h例程,但从我所看到的来看,这些检查特定的按键,并不完全是我需要的。SFML 框架提供"sf::Keyboard::isKeyPressed",但该框架也检查特定的按键,但不是整个键盘,我还尝试创建一个数组,作为从"sf::Keyboard::Key"枚举到 ASCII 字符的映射,但它并不令人信服,此外,按键似乎"粘住",按下的键的字符即使在释放后也会不断被读取。
如果您使用的是SFML,它实际上非常简单。您需要使用 sf::Event::KeyEvent 类(在本例中为 struct(。
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
。 否则,它相当简单。
如果你只是想检测一个按键 kbhit(( 是功能。Borland编译器家族,conio.h,但当我在谷歌上搜索它时,它不是C++标准的一部分(。 https://www.cprogramming.com/fod/kbhit.html
替代方案:在类Unix操作系统下,您可以使用ncurses来模拟大多数conio行为(看看它是否适合您( https://www.quora.com/With-哪个函数-可以-我-替换-kbhit-in-C++-因为-the-header-conio-h-don-exist-in-linux
如果您正在寻找可以检测按下了哪个键的代码(即字母上方的 Numpad 1 和 1 或 Esc 或箭头键之类的东西(。这段代码在borland 编译器上对我有用。当您获取扫描码(不是ascii(时,键盘中的每个键都不同(即使是非ASCII键也有值(
void getkey()
{
union REGS ii,oo;
while(!kbhit());
ii.h.ah=0;//service no for ascii and scan code
int86(22,&ii,&oo);
ascii=oo.h.al;
scan=oo.h.ah;
}
我在学校项目中使用了上面的代码,所以我不记得我找到它的确切来源。但我认为它是 Yashwant Kanetkar 在 GUI 部分下的 Let us C(它后来被删除了,所以你正在寻找 2008 年之前的出版物(。
希望对您有所帮助。
- 一种在C++中读取TXT配置文件的简单方法
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++ 将静态方法转换为简单方法
- 将一系列数字映射到 CPP 中的值的简单方法
- 引用基类模板的成员变量的简单方法
- 学习数据结构和算法的简单方法
- boost::variant - 对变体应用算术的最简单方法
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 使用新运算符C++创建多维数组的简单方法
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- OpenSSL模块化最大数据类型大小的简单方法
- 获取当前按键的简单方法
- 多个 if-else 测试的更简单方法
- 为具有多个参数的函数创建 SWIG 类型图的更简单方法?