DirectInput入门

DirectInput入门
我想在博客里记录一些学习DirectX的笔记。这是第一篇。
一直以来对于DirectX的一套没有花时间去学习,3D图形api也是学习了OpenGL,相当长的一段时间里,总是认为自己不会去接触这些。到公司写了快一年的游戏逻辑了,才明白逻辑固然很重要,但是写逻辑写一年和写两年的区别不大。做游戏,做网游不就那几个大块么,图形,网络,数据库,io并发。写逻辑是要写的,但终究需要在某一领域有所专长,才是正道。

言归正传吧。

DirectInput是一个不依赖硬件的虚拟输入系统,是建立于硬件抽象层(HAL)之上的接口。

微软的DirectX一套均采用COM开发,所以无论DDraw还是DirectInput的构建、设置、使用,代码都相差无多。基本步骤都是建立xxx接口对象,建立xxx设备,设置xxx相关属性(参数),使用之。

我们要在应用程序中使用DirectInput,分以下三步走。
1)初始化
2)获取设备状态
3)根据设备状态,进行你的自定义处理。

我这里给出一个简单的例子。该例子就是在标准的windows应用程序中使用DirectInput所需的步骤。
首先需要包含必要的宏定义和头文件
1  #define  INITGUID
2  #include  < objbase.h >
3  #include  < dinput.h >

相关的全部变量:
LPDIRECTINPUT       g_dinput  =  NULL;
LPDIRECTINPUTDEVICE g_Keyboard 
=  NULL;


建立初始化函数:

 1  BOOL InitDirectInput(HINSTANCE hInstance)
 2  {
 3       //  创建DirectInput对象
 4       if  (DI_OK  !=  DirectInputCreate(hInst, DIRECTINPUT_VERSION,  & g_dinput, NULL))
 5           return  FALSE;
 6 
 7       //  创建键盘设备
 8       if  (DI_OK  !=  g_dinput -> CreateDevice(GUID_SysKeyboard,  & g_Keyboard, NULL))
 9           return  FALSE;
10 
11       //  设置协作等级
12       if  (DI_OK  !=  g_Keyboard -> SetCooperativeLevel(g_hWnd, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND))
13           return  FALSE;
14 
15       //  设置数据格式
16       if  (DI_OK  !=  g_Keyboard -> SetDataFormat( & c_dfDIKeyboard))
17           return  FALSE;
18 
19       //  获取设备
20       if  (DI_OK  !=  g_Keyboard -> Acquire())
21           return  FALSE;
22 
23       return  TRUE;
24  }

在哪里使用呢?我们在windows消息循环里面,处理完消息之后:
 1      unsigned  char  keyboard_state[ 256 ];
 2       //  Main message loop:
 3       while  (GetMessage( & msg, NULL,  0 0 )) 
 4      {
 5           if  ( ! TranslateAccelerator(msg.hwnd, hAccelTable,  & msg)) 
 6          {
 7              TranslateMessage( & msg);
 8              DispatchMessage( & msg);
 9          }
10 
11          g_Keyboard -> GetDeviceState( 256 , (LPVOID)keyboard_state);
12           if  (keyboard_state[DIK_UP])
13          {
14              ::MessageBox(NULL,  " up " " msg " , MB_OK);
15          }
16      }

基本就是这些了。

我这里主要是作为学习笔记留在blog上,说的不清楚或者不专业或者其他原因让你没有看明白的,请看
《windows游戏编程大师技巧》一书。






你可能感兴趣的:(DirectInput入门)