C# XNA数字锁影响输入

C# XNA数字锁影响输入,c#,visual-studio-2008,input,xna,C#,Visual Studio 2008,Input,Xna,我有一个中断,键盘上的按键给了我协调键。当数字锁打开时,按键显示为Numpad1、Numpad2等。当数字锁关闭时,numpad按键变为End、Left、Right、up、PageLock。。。我不能让这种情况发生,因为我需要保留这些键(左,右…)作为实际的箭头键。我宁愿输入不受数字锁的影响。然而,我似乎无法缓解这种情况,因为我直接从XNA获得了输入。其他人能确认这在VS 2008上的XNA 3.1中发生了吗?您可以为游戏中的每个动作定义2个键 例如,使用另一个键(Numpad4)代替Keys.

我有一个中断,键盘上的按键给了我协调键。当数字锁打开时,按键显示为Numpad1、Numpad2等。当数字锁关闭时,numpad按键变为End、Left、Right、up、PageLock。。。我不能让这种情况发生,因为我需要保留这些键(左,右…)作为实际的箭头键。我宁愿输入不受数字锁的影响。然而,我似乎无法缓解这种情况,因为我直接从XNA获得了输入。其他人能确认这在VS 2008上的XNA 3.1中发生了吗?

您可以为游戏中的每个动作定义2个键

例如,使用另一个键(Numpad4)代替Keys.Left向左移动

在输入检查代码中,您只需检查是否按下了以下两个键中的任何一个:

例如:

if (IsKeyPressed(Keys.Numpad4) || IsKeyPressed(Keys.Left)
{
    // Do some action.
}

当然,您也可以创建一个方法,该方法接受2个键并在内部执行,而无需每次编写代码。

XNA在内部使用win32函数来确定键盘状态。此功能无法区分数字键盘、箭头键和插入组

显然,您可以通过使用(及其朋友)来区分键

我将把在XNA应用程序中获取win32消息所需的互操作以及如何检查消息数据作为练习


(就我个人而言,我建议只修改控制方案。或者只是观察用户的num lock状态。一般来说,接管num lock key之类的功能是个坏主意!)

我还没有验证过这一点,但是Morpheus Development的Ryan Rubley在这里发布了一个值得一看的解决方案:

下面是一个完全有效的解决方案,可以使用numpad键,而不考虑 numlock的状态,并且不打开numlock

由Ryan Rubley于2011年9月5日创建


如果我需要用钥匙做些不同的事情怎么办;e、 g.使用方向键移动,但使用numpad键移动其他对象?这个解决方案当时不起作用。这不是你最初要求的(或者我不理解)。你说过你想以相同的方式处理NUM ON和NUM OFF键,因此我提出了建议。否决(仅)是因为它没有回答预期的问题。@Andrew Russell的答案应该排在第一位,而不是这一位(直到我做了投票)。另一个解决方案可能是强制NUMLOCK,这可能吗?对于那些感兴趣的人,我只是在这个问题中问这是否可能(见上面的评论):