整个程序太复杂了,不能在这里显示。基本上,只要关注green highlights in my recent git commit即可。我对DirectInput非常陌生,所以我想我已经犯了几个错误。我已经非常仔细地研究了MSDN文档,所以我保证我不会只是抛出这篇文章,然后在上面盖上FIX it FOR ME。:)
基本上,我认为我已经将我的问题缩小到了Engine::getEvent (238+行)周围的代码区域。我不明白这些函数是如何工作的,并且我已经处理了某些部分以达到不同的结果。我在这里的目标是直接读取键盘事件并将这些原始数字输出到屏幕上(稍后我将处理这些数字的含义)。这里的问题与KEYBOARD_BUFFER_SIZE有关。如果我将它设置得很小,程序看起来运行得很好,但它没有输出任何事件。如果我把它变大,它会运行得更好一些,但它开始变慢,然后冻结( OpenGL窗口只有一个旋转的颜色立方体)。如何正确捕获键盘事件?
我检查了代码中前面所有设置步骤的返回值。它们都很好地返回了DI_OK。
发布于 2011-04-15 09:11:27
你的代码看起来没问题(根据this tutorial, which I have used in the past)。使用几个基于堆栈的数组是有问题的,但应该不会有太大的问题(除非您开始运行大量并发的getEvent调用)。
但是,您最好的选择是使用stop using DirectInput并开始使用Windows Raw Input。最好是尽早(也就是现在)进行这种转换,而不是以后意识到你真的需要使用DI以外的其他东西来获得你想要的结果。
https://stackoverflow.com/questions/5670585
复制相似问题