我使用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语句。
由于
答案 0 :(得分:1)
你正在尝试制作一个opengl游戏,所以你可能会使用GLFW。如果是这种情况,那么您可以使用glfwGetKey()
这样做:
if (glfwGetKey(GLFW_KEY_UP) == GLFW_PRESS) {...}
if (glfwGetKey(GLFW_KEY_DOWN) == GLFW_PRESS) {...}
在tutorial 6的opengl-tutorial.org中很好地解释了这种方法。但您应该从beginners tutorials及之后intermediate tutorials的第一个教程开始。
如果您要自己创建win32窗口,则可以收听WM_KEYDOWN
或WM_KEYUP
消息,并从wparam获取virtual key code。在谷歌搜索一分钟后,我发现了这两个网站here和here。
答案 1 :(得分:1)
您可以使用PeekMessage
和TranslateMessage
以及DispatchMessage
的组合。注册自己的Windows程序(WNDPROC)来处理来自Windows的输入消息非常简单。
MSG msg;
while(PeekMessage( &msg, NULL, 0, 0 ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
DispatchMessage
函数调用您的注册过程。有关详细信息,请参阅:this。