第十二章:键盘与鼠标输入.doc

第十二章:键盘与鼠标输入.doc

第十二章:键盘与鼠标输入 Introduction (序) 这一章我们将会创建一个简单的、可以被用户控制的地球模型。用户将可以通过鼠标来控制它的位置,通过键盘控制它的尺寸和旋转。 DirectInput 我们一直在用Direct3D来绘制3D对象,现在,我们想给程序增加一些与用户交互的功能,这得靠DirectInput。DirectInput允许我们从任何输入设备读取数据,鼠标、键盘或是游戏操纵杆,我们能用这些数据来改变场景中的元素。在此教程中,我们只会接触到键盘与鼠标,我们会在将来的教程中接触游戏操纵杆。 在我们的程序中,要增加与用户交互的功能我们需要完成以下步骤: 初始化DirectInput 设置键盘 设置鼠标 在每一帧,得到键盘与鼠标的当前状态并借以修改场景 程序结束时清理DirectInput Include and Library files (头文件与库文件) 首先我们必须要做的,就是在项目中增加一些头文件与库文件,这很简单,不是吗? dinput.h dinput8.lib dxguid.lib The Controls (控制方案) 此章例子的控制方案如下: 上键:地球放大 下键:地球缩小 左键:增加地球的向左旋转 右键:增加地球的向右旋转 鼠标移动:改变地球的位置 鼠标左键:停止地球旋转 鼠标右键:默认的旋转方式 Initialising DirectInput (初始化DirectInput) 首先我们得初始化DirectInput,为此我们增加了一个新的函数InitialiseDirectInput,它会在CGame:: Initialise中被调用。下面这一小段代码用于创建DirectInput对象以待用: //Create the DirectInput object if(FAILED(DirectInput8Create(hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)m_pDirectInput, NULL))) { LogError(liUnable to create DirectInput interface.); return false; } else { LogInfo(liDirectInput interface created OK); } 第一个参数是我们从WinMain函数获得的应用程序实例句柄;第二个参数是DirectInput的版本,用DIRECTINPUT_VERSION代表当前的版本(输入其它版本导致Dinput模拟那个版本);第三个是想要的接口,我们这里就用IID_IDirectInput8;第四个是最重要的,它会返回DInput对象的接口指针已待用;第五个我们不用理它,输入NULL就对了。 m_pDirectInput是CGame的一个LPDIRECTINPUT8型的成员变量,当然是DInput对象的接口指针了。 Setting up the keyboard (设置键盘) 创建好DirectInput对象之后我们就可以设置键盘了。下面是设置键盘的代码,我会在后面逐渐地解释它们。 //KEYBOARD ======================================================================= //Create the keyboard device object if(FAILED(m_pDirectInput-CreateDevice(GUID_SysKeyboard, m_pKeyboard, NULL))) { CleanUpDirectInput(); LogError(liUnable to create DirectInput keyboard device interface.); return false; } else { LogInfo(liDirectInput keyboard device interface created OK.); } //Set the data format for the keyboard if(FAILED(m_pKeyboard-SetDataFormat(c_dfDIKeyboard))) { CleanUpDirectInput(); LogError(liUnable to set the keyboard data format.); return false; } else { LogInfo(liSet the keyboard data

文档评论(0)

1亿VIP精品文档

相关文档