C++ 获取当前按键的简单方法
我已经开始使用SFML作为我正在开发的代码编辑器的基本图形框架,唯一似乎不能完全正确的事情是键盘输入 在QB64(一种类似于Visual Basic的语言)中,我习惯于使用_keyhit命令(返回虚拟键代码)或inkey$命令(直接返回当前按键的字符)来获取按键。我在寻找一个类似的解决方案在C++(不一定是跨平台,可能很容易实现,连同SFML)< /P>C++ 获取当前按键的简单方法,c++,windows,C++,Windows,我已经开始使用SFML作为我正在开发的代码编辑器的基本图形框架,唯一似乎不能完全正确的事情是键盘输入 在QB64(一种类似于Visual Basic的语言)中,我习惯于使用_keyhit命令(返回虚拟键代码)或inkey$命令(直接返回当前按键的字符)来获取按键。我在寻找一个类似的解决方案在C++(不一定是跨平台,可能很容易实现,连同SFML)< /P> 到目前为止,我尝试使用的是_getch,它似乎不适用于Windows框架,也不适用于SFML,也许我应该为此使用一些Windows.h例程,但
到目前为止,我尝试使用的是_getch,它似乎不适用于Windows框架,也不适用于SFML,也许我应该为此使用一些Windows.h例程,但从我所看到的来看,这些例程检查特定的按键,而不是我所需要的。SFML框架提供了“sf::Keyboard::isKeyPressed”,但它也检查特定的按键,但不检查整个键盘,我还尝试创建一个数组,作为从“sf::Keyboard::Key”枚举到ASCII字符的映射,但它不能令人信服,而且,键似乎“粘住了”而且,即使在被释放后,按下的键的字符仍会被读取。如果您使用的是SFML,它实际上非常简单。您需要使用sf::Event::KeyEvent类(或者在本例中是struct) 不过问题是,你必须从某些方面获得事件。通常,这是从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
。
否则,它相当简单。如果您使用的是SFML,它实际上相当简单。您需要使用sf::Event::KeyEvent类(或者在本例中是struct) 不过问题是,你必须从某些方面获得事件。通常,这是从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
。
否则,这是相当简单的。< p>如果你只是想检测一个按键,KBHITHER()是函数。(Borland家族编译器,Chani.h,但不是我在Google中的C++标准的一部分)。 备选方案:在类Unix操作系统下,您可以使用ncurses来模拟大多数conio行为(看看它是否适合您) 如果您正在寻找一种可以检测按下哪个键的代码(即字母表上方的Numpad 1和1或类似Esc或箭头键的东西)。这段代码在borland编译器上对我有效。当您获取扫描代码(非ascii)时,键盘中的每个键都不同(即使非ascii键也有一个值) 我在我的学校项目中使用了上述代码,所以我不记得找到它的确切来源。但我认为它是Yashwant Kanetkar在GUI部分下让我们使用C的(它后来被删除了,所以您正在寻找2008年之前的出版物)
希望它有帮助。
< p>如果你只是想检测一个按键,KBHITHER()是函数。(Borland的编译器家族,Chani.h,但不是我在Google中的C++标准的一部分)。 备选方案:在类Unix操作系统下,您可以使用ncurses来模拟大多数conio行为(看看它是否适合您) 如果您正在寻找一种可以检测按下哪个键的代码(即字母表上方的Numpad 1和1或类似Esc或箭头键的东西)。这段代码在borland编译器上对我有效。当您获取扫描代码(非ascii)时,键盘中的每个键都不同(即使非ascii键也有一个值) 我在我的学校项目中使用了上述代码,所以我不记得找到它的确切来源。但我认为它是Yashwant Kanetkar在GUI部分下让我们使用C的(它后来被删除了,所以您正在寻找2008年之前的出版物)希望能有所帮助。从90年代初开始,在计算机上就没有“简单的方法”可以做任何事情。从90年代初开始,在计算机上就没有“简单的方法”可以做任何事情。这是假设您正在运行SFML作为图形,因此此选项最适合您。谢谢,这很有效,不过类成员似乎被称为“key”而不是“KeyEvent”,而“GetEvent”则称为“pollEvent”“。无论如何,如果SFML使用ASCII常量而不是它自己的属性常量,那就太好了。嘿!我找到了一个更好的解决方案,使用sf::Event::TextEntered和Event.text这是假设您正在运行SFML作为图形,因此此选项最适合您。谢谢,这很有效,但是类成员似乎被称为“key”而不是“KeyEvent”,而“GetEvent”被称为“pollEvent”。无论如何,如果SFML使用ASCII常量而不是它自己的属性常量,那就太好了。嘿!我找到了一个更好的解决方案,使用sf::Event::textinenter和Event.text