我正在学习XNA(v.4.0),我正在使用键盘上的箭头键来移动精灵,并在持有空间时使角色进行冲刺。
下面是我的代码,用于确定按下了哪些键:
currentKBState = Keyboard.GetState();
bool right = currentKBState.IsKeyDown(Keys.Right);
bool left = currentKBState.IsKeyDown(Keys.Left);
bool up = currentKBState.IsKeyDown(Keys.Up);
bool down = currentKBState.IsKeyDown(Keys.Down);
bool space = currentKBState.IsKeyDown(Keys.Space);
System.Diagnostics.Debug.WriteLine(String.Format("{0} {1} {2} {3} {4}", right, left, up, down, space));
问题在于我无法同时按下全部5个。有时只有两个会注册。例如,如果我按住“向上”,“向下”和“向左”,它只表示上下都是正确的,无论我按住三个键多长时间。无论按哪种组合,我都希望能够处理。为什么不注册所有按下的按钮?我需要采用不同的方式吗?
答案 0 :(得分:6)
这不是代码问题。这是键盘硬件的限制。
便宜的键盘可靠地检测到两个并发按键,但在三个键的某些组合中已经失败。
现代键盘检测重影,而不是注册第四个键,它们将忽略第三个键,即所谓的干扰。按下哪些键卡在键盘的品牌和型号之间有所不同。由于大多数消费者键盘使用的键盘矩阵,当按下矩阵上方块中的四个键中的三个键时,经常会出现卡纸和重影。(例如QASW或JKUI。)
答案 1 :(得分:0)
你可以试试
Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys();
然后遍历Keys并检查是否按下了某些