在XNA中正确获取聊天按键
所以,我要直截了当地说,我正在制作一个XNA游戏中的聊天系统。我可以很容易地找出按下了哪些键,但我无法知道实际键入的是什么。在我看来,他们好像在说:在XNA中正确获取聊天按键,xna,keyboard-events,Xna,Keyboard Events,所以,我要直截了当地说,我正在制作一个XNA游戏中的聊天系统。我可以很容易地找出按下了哪些键,但我无法知道实际键入的是什么。在我看来,他们好像在说:oemshift你好,比尔oemshift你好吗。你好吗?(或者类似的话) 处理所有这些的最佳方法是什么?所以我使用的简单解决方案是获得一个Win32键盘的钩子,并让windows翻译正在键入的任何内容。它在我的另一台电脑上,但它基本上是在我的电脑上使用这个解决方案。(职位编号#10) 令人敬畏的是,如果您使用[DllImport(“user32.d
oemshift你好,比尔oemshift你好吗。你好吗?
(或者类似的话)
处理所有这些的最佳方法是什么?所以我使用的简单解决方案是获得一个Win32键盘的钩子,并让windows翻译正在键入的任何内容。它在我的另一台电脑上,但它基本上是在我的电脑上使用这个解决方案。(职位编号#10) 令人敬畏的是,如果您使用
[DllImport(“user32.dll”,CharSet=CharSet.Unicode)]
(所有.dll导入中的字符集部分),您可以从键盘获得本地化输入
把它放在某个地方,在Initialize中注册事件,就这样!希望对你有用
编辑
整个Win32业务可能看起来很吓人,但不要因此而停止使用它-这只是复制粘贴的问题,您可以在2分钟内完全运行它。我猜您是通过
keyState.GetPressedKeys()查询键盘输入。
您必须在代码中的某个地方使用switch
语句将键的成员映射到实际字符。ToString()
方法适用于字母,但不适用于符号,因为它们是由名称指定的
switch (keyPressed)
{
case Keys.OemPeriod :
character = '.';
break;
case Keys.OemQuestion :
character = '?';
break;
// More cases
}
不过要小心,因为键盘是不同的。正如您正确指出的:钥匙!=象征。其他硬件上的某些键可能与完全不同的符号相关联 对于PC来说,XNA框架中没有内置任何东西可以让它变得简单(WP7和Xbox的情况不同)
这篇文章很好地总结了你所有的选择
基本上
构建一个具有字符到按键映射的大型字典
钩入XNA游戏的形式键下,键上,按键事件
使用IMessageFilter接口
使用SetWindowsHookEx获取关键事件
每种方法都有各自的优缺点,本文作者提供了一个可以下载的示例
在做一些研究时,我还从Nuclex的人那里找到了一个图书馆。他们通常会创建相当健壮的解决方案,因此也绝对值得一试
需要记住的重要一点是,你在电脑上,任何一个库都可以使用(通过一些修改/调整)。所以不要局限于只看XNA相关的样本。DirectInput、SlimDX、SharpDX等的示例也是可选的,它们可能需要一些额外的工作才能加入到您的项目中。您希望在WP7、Xbox或PC上完成此操作吗?@George oh,对不起,忘了提一下。这都是基于PC的。