C ++ GetAsyncKeyState替代方案

时间:2013-05-14 18:55:18

标签: c++ keyboard

我使用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语句。

由于

2 个答案:

答案 0 :(得分:1)

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

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

tutorial 6opengl-tutorial.org中很好地解释了这种方法。但您应该从beginners tutorials及之后intermediate tutorials的第一个教程开始。

如果您要自己创建win32窗口,则可以收听WM_KEYDOWNWM_KEYUP消息,并从wparam获取virtual key code。在谷歌搜索一分钟后,我发现了这两个网站herehere

答案 1 :(得分:1)

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

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

DispatchMessage函数调用您的注册过程。有关详细信息,请参阅:this