积极答复者
请问.NET中如何产生KeyPressing事件?

问题
-
如题,我最近做一个小游戏,需要不断按下上下左右键,但是我发现如果响应KeyDown事件,那么就会很慢。一般的情况就是响应时需要先卡一下,然后才连续响应,这还好,更不好的情况就是如果我同时按下Down和Left两个键,那么这两个键都会没有响应(堵塞!?),我使用《使命召唤6》和另一个小游戏测试了一下,键盘响应很快,按键时不会先卡一下,同时按多个键的响应也正常。
同一个键盘相同的按键出现不同的反应,我觉得应该是我的方法的问题,可能在这种情况下我不应该使用KeyDown事件,想请教一下各位老师,我应该怎么才能回忆键盘响应?
我的想法是封装出一个KeyPressing的事件出来,其中包括一个Timer,用来激发事件,KeyDown时,向一个表中添加相关信息,在KeyUp之前,将按照Timer的Inteval属性不断产生KeyPressing事件,直到KeyUp,我刚刚实现了这个,但是发现还是不正常,因为有时很灵敏,有时又不够灵敏,应该宣布我那样做不行,现在想请问如何做出一个KeyPressing事件?
答案
-
Flysha 你好,
你可以参考一下这篇关于XNA的文章,里面有提到Input类,DirectX中的DirectInput类:http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100802/515978.html
希望对你有帮助。
Mio
Mio Miao[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Flysha 2011年3月21日 23:16
全部回复
-
是的,我使用的是WinForm,且暂时不能移植到其它框架。据我的分析, WinForm的键盘事件这样设置是为了保证打字的时候不出现按下一个键出现多个字符的异常,完全有可能跳过这种机制。
后来我通过进不步了解,发现网上说使用GetAsyncKeyState()或者DirectInput都可以解决这个问题,那想请问具体怎么操作呢?
还有一个附带的问题,我下载了DirectX的SDK,并调用了Microsoft.DirecX.DirectInput.dll,但是发现这个dll的版本是1.1,似乎不能在.NET4.0上运行,请问是怎么回事?
再次感谢各位老师!
-
Flysha 你好,
你可以参考一下这篇关于XNA的文章,里面有提到Input类,DirectX中的DirectInput类:http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100802/515978.html
希望对你有帮助。
Mio
Mio Miao[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Flysha 2011年3月21日 23:16
-
问题解决就好!不客气。
Mio Miao[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.