【问题标题】:Having problems detecting keypress in c++在 C++ 中检测按键时出现问题
【发布时间】:2020-06-27 20:41:58
【问题描述】:

我正在尝试用 C++ 制作一个简单的游戏,为此我必须检测按键(特别对上、下、左和右感兴趣)。为此,我做了以下操作

#include <iostream>
#include <conio.h>
using string = std::string;

const int K_UP = 72;
const int K_DOWN = 80;
const int K_LEFT = 75;
const int K_RIGHT = 77;

string get_pressed()
{
    if (K_UP == _getch());
    {
        return "UP";
    }
    if (K_DOWN == _getch());
    {
        return "DOWN";
    }
    if (K_RIGHT == _getch());
    {
        return "RIGTH";
    }
    return "LEFT";

}

int main()
{
    cout << "MOVING" << get_pressed() << endl;
}

但是,无论我按什么,输出都是“向上移动”。另外,当我阅读“如何检测按键”时,我读到 72 是 Windows 为向上键提供的数字,但是当我尝试打印 _getch() 然后按向上键,它给了我 244,它对 rigth、left 和 down 也是如此。我对这里发生的事情感到困惑,任何帮助将不胜感激。谢谢

【问题讨论】:

  • 对不起,我不确定它是 Visual Studio 附带的 c++
  • 刚刚google了一下turbo c++是什么,肯定不是那个
  • @TedLyngmo Microsoft 已将所有 unix API 声明为非标准,声明了带有 _ 前缀的新版本,并调用了该标准。
  • @GemTaylor Posix 也不是 C++ 标准,这是正确的。 :-)
  • 调用 _getch 3 次需要 3 次不同的按键。调用一次并将值保存在变量中。

标签: c++ key keypress


【解决方案1】:

您(可能)将密钥代码与 ascii 代码混淆了。 c/c++ 方法基本上只支持密钥的 ascii 代码,而您正在阅读的文档是针对原始密钥代码的。

例如,有一些 API 可以读取 Windows 上的原始键码,但无论如何您可能都需要使用它们,否则您可能会发现您遇到缓冲 io 的问题,在按下换行符之前根本不会读取键。

在 unix 或终端模拟器中,箭头键和编辑键将生成(可能)转义序列,即一系列以代码 31 开头的 ascii 代码,用于转义。 termcap 库应该可以帮助您解码这些内容。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2014-03-11
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2011-08-17
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多