0

我正在使用 Windows.h 库的 GetAsyncKeyState 函数来定义在键盘上按下的键。例如,这是返回按键的 int 值的程序。

#include <iostream>
#include <windows.h>
using namespace std;
int main (){
    char i;
    for(i=8;i<190;i++){
        if(GetAsyncKeyState(i)== -32767){
            cout<<int (i)<<endl;
        }
    }

    return 0;
}

但是现在我正在尝试制作一个非常简单的 openGl 游戏,而这个功能似乎很慢。是否有不需要 for 循环 180 次和 if 语句的函数。

谢谢

4

2 回答 2

1

您正在尝试制作 opengl 游戏,因此您可能会使用 GLFW。如果是这种情况,那么您可以glfwGetKey()这样使用:

if (glfwGetKey(GLFW_KEY_UP) == GLFW_PRESS) {...}
if (glfwGetKey(GLFW_KEY_DOWN) == GLFW_PRESS) {...}

该方法在opengl-tutorial.org的教程 6中有很好的解释。但是您可能应该从初学者教程的第一个教程和以后的中级教程开始。

如果您要自己制作win32 窗口,您可以监听WM_KEYDOWNWM_KEYUP消息并从wparam获取虚拟键码。经过一分钟的谷歌搜索后,我在此处此处找到了这两个站点作为示例。

于 2013-05-14T19:09:44.877 回答
1

您可以使用PeekMessageTranslateMessage的组合DispatchMessage。注册您自己的 Windows 过程 (WNDPROC) 来处理来自 Windows 的输入消息非常简单。

MSG msg;
while(PeekMessage( &msg, NULL, 0, 0 ))
{
    TranslateMessage( &msg );
    DispatchMessage( &msg );
}

DispatchMessage函数调用您注册的过程。请参阅:以获取更多信息。

于 2013-05-14T20:53:57.380 回答