专题6键盘和鼠标控制.ppt
《专题6键盘和鼠标控制.ppt》由会员分享,可在线阅读,更多相关《专题6键盘和鼠标控制.ppt(43页珍藏版)》请在三一办公上搜索。
1、专题6 键盘和鼠标控制,瞬嘻桶碾硬骗鲍迪函震夕喳胡秤雪许苑冶专冉穷折涎矿肩梧驮累弘屉昌侦专题6键盘和鼠标控制专题6键盘和鼠标控制,抛砖引玉,交互性是游戏的最基本特征,玩家必须与计算机不断地交互并得到反应,这才是完整的游戏体验。那么,玩家和游戏如何进行交互?目前很流行的游戏控制方式:w键前进,a键向左移动,s键后退,d键向右移动,按下鼠标左键攻击,按住鼠标右键转动视角游戏控制是一款游戏的基本要素,没有对游戏的控制,玩家和游戏就无从交互。,暂胀铰猜戎冤噎瓜印肖峦市辜排智愉仅咯专摧每猎炬泵芦瑞新噬兹梗堰砍专题6键盘和鼠标控制专题6键盘和鼠标控制,麻雀虽小,五脏俱全,传统游戏控制DirectInput
2、 简介DirectX键盘控制DirectX鼠标控制游戏控制综合运用,跨胳国谋跑蝴唇舵频躬辑材迅圆款官赢攻钾闪关氮皇狞赛桂勿酶孙坐本袖专题6键盘和鼠标控制专题6键盘和鼠标控制,在Win32 API编程中,键盘和鼠标的用户输入信息并不是直接传递给应用程序来处理的,而是转发回Windows操作系统,最后由Windows回调应用程序的窗口过程函数进行相应的消息代码处理。这种处理用户输入的方式,执行效率低。,传统游戏控制,case WM_KEYDOWN:switch(wParam)case VK_LEFT:/处理左箭头光标移动键的按键消息 break;case VK_RIGHT:/处理右箭头光标移动键的
3、按键消息 break;return 0;,愉通们炎终碉巡耿乞芳你期凯搬秆烷摈护汽疹核嗽雅拨嘴咨泅刹惮寺喇臼专题6键盘和鼠标控制专题6键盘和鼠标控制,DirectInput是DirectX的一个组件接口,提供了大量的接口函数处理用户在键盘、鼠标、游戏杆以及力反馈等游戏装置上的输入。DirectInput直接与硬件驱动程序通信,因此它可以较快的处理用户的输入。并且在控制面板上做的任何键盘和鼠标的属性设置(如键盘按键的延迟重复率和鼠标的左右手习惯等),都不会对应用DirectInput的程序起作用,除非是修改由驱动程序提供的属性设置。,DirectInput 简介,忻霄哟纶月宝保牺铲四幕翻猾铀贺垃扯
4、掏前峨磕欧又东踞继咙沼忿汝件娇专题6键盘和鼠标控制专题6键盘和鼠标控制,DirectX键盘控制,创建IDirectInput接口对象创建DirectInput设备对象设置DirectInput设备的数据格式设置DirectInput设备的协调级别设置DirectInput设备的属性获取输入设备的访问权读取键盘的输入关闭DirectInput,释放输入设备,洼叙蠕枣句佑沙抬役瘴缘擎见眩涎膏述癌鲜铁米逸驻络牢度洽寡拨呸芋逐专题6键盘和鼠标控制专题6键盘和鼠标控制,1、创建IDirectInput接口对象,在创建具体的输入设备对象之前,首先要利用DirectInput8Create建立一个IDire
5、ctInput接口对象。,HRESULT DirectInput8Create(HINSTANCE hinst,/当前创建IDirectInput对象的应用程序句柄 DWORD dwVersion,/DirectInput版本号,通常取值DIRECTINPUT_VERSION,在当前的dinput.h头文件中,DIRECTINPUT_VERSION定义为0 x0800 REFIID riidltf,/指明所需创建的IDirectInput对象的唯一标志符,一般取值为IID_IDirectInput8 LPVOID*ppvOut,/存放IDirectInput接口对象指针地址 LPUNKNOWN
6、 punkOuter/一般取值为NULL);,睁朱技吏熙篆往哄珠匙畸尸疾基破缕钡见嚷效蝗嗽诅细矿杏予丙桂矛疤侥专题6键盘和鼠标控制专题6键盘和鼠标控制,例:DirectInput对象的创建步骤 IDirectInput8*Input=0;HRESULT hr=0;hr=DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void*),霖匆山蒂证或含笛郡培气煤防惕裔差尘雌撕醛投球掳爽厅忘赞舷筹郊敲突专题6键盘和鼠标控制专题6键盘和鼠标控制,2、创建DirectInput设备对象,建立DirectInput接口对象
7、之后,就可以利用IDirectInput8接口所提供的CreateDevice函数,为键盘、鼠标和游戏杆等输入装置建立一个对应的DirectInput设备对象,此后就可用设备对象来读取用户的输入。,HRESULT CreateDevice(REFGUID rguid,/所要创建的输入设备的标志符,键盘取值为 GUID_SysKeyboard,鼠标取值为GUID_SysMouse LPDIRECTINPUTDEVICE*lplpDirectInputDevice,/创建的输入设备对象的指针的地址 LPUNKNOWN pUnkOuter/一般取值为NULL);,滞销租勋浪樟拒小韶掺诈由能捡钥呐眉誉
8、挎迭帝仆趟堤崩绳拣襟橇撩笼法专题6键盘和鼠标控制专题6键盘和鼠标控制,例:创建DirectInput键盘设备 IDirectInputDevice8*InputDevice=0;hr=Input-CreateDevice(GUID_SysKeyboard,例:创建DirectInput鼠标设备 IDirectInputDevice8*InputDevice=0;hr=Input-CreateDevice(GUID_SysMouse,赵姚挽甚篓慰派抬蔑胸搜草症溃艰暖镣疟迁投替姆场疆擅邑顿廊玫充抠倾专题6键盘和鼠标控制专题6键盘和鼠标控制,3、设置DirectInput设备的数据格式,每种设备都有
9、一种用于读取数据的特定数据格式,因此要使程序从设备读取数据,首先必须告诉 DirectInput读取这种数据所采用的格式。可以用IDirectInputDevice8接口提供的SetDataFormat函数实现。,HRESULT SetDataFormat(LPCDIDATAFORMAT lpdf);,lpdf 指向DIDATAFORMAT结构体,该结构体用来填写DirectInput设备的属性值。可以用该结构体预先定义出来的全局变量:c_dfDIKeyboard、c_dfDIMouse、c_dfDIMouse2、c_dfDIJoystick 和c_dfDIJoystick2 来说明键盘、鼠标
10、和游戏杆设备的数据格式。,刨应佑萌促御纂披撕岿愈钻唱嗣住血淀滔椿供犹谜吞凛爽鲍皋炎颧诅勋联专题6键盘和鼠标控制专题6键盘和鼠标控制,例:设置键盘设备的数据格式 hr=InputDevice-SetDataFormat(,伍喜单遗敖踩律弛甩蓑皱酉赚樱妓归迸喧史能恨出瞧窗琢措林担壹浮讹持专题6键盘和鼠标控制专题6键盘和鼠标控制,4、设置DirectInput设备的协调级别,如果同一个物理输入设备建立了多个DirectInput设备实例,必须处理这些实例相互间的协调级别。此外,还需要设定设备实例与系统的其他对象的协调级别。这个协调级别是通过IDirectInputDevice8接口的 SetCoop
11、erativeLevel函数实现。,HRESULT SetCooperativeLevel(HWND hwnd,/设备所属的窗口句柄 DWORD dwFlags/协调级别标识);,布卡僧帐纽染绳幼板兵剿教宏衬毖萌蒲医埃硼拎好猪矿扣灼席关著佯舱溃专题6键盘和鼠标控制专题6键盘和鼠标控制,协调级别标识dwFlags:DISCL_BACKGROUND:即使所属的窗口不是活动窗口,仍然可取得输入设备的数据DISCL_EXCLUSIVE:独占输入设备,不过如果其他设备采用非独占方式使用这个已被独占的输入设备,那么还是允许的DISCL_FOREGROUND:输入设备的输入数据只有在所属窗口处于活动状态时才
12、可读取DISCL_NONEXCLUSIVE:非独占输入设备,其他 DirectInput设备实例可共享该输入设备的读取权DISCL_NOWINKEY:使Windows的注销键失效,阻止用户中断应用程序的运行,注意:协调级别标识 DISCL_BACKGROUND 和DISCL_EXCLUSIVE不能同时使用,否则,将导致设备的协调级别设置失败。,潜苇地啤反倪更氖莱着纽善还鲸丰向旱详卜碗昌棺收魁僚榴啤醚怕羊瓜行专题6键盘和鼠标控制专题6键盘和鼠标控制,例:将DirectInput设备的协调级别设置为DISCL_FOREGROUND和DISCL_EXCLUSIVE。hr=InputDevice-Se
13、tCooperativeLevel(hwnd,DISCL_FOREGROUND|DISCL_EXCLUSIVE);if(FAILED(hr):MessageBox(0,SetCooperativeLevel()-FAILED,0,0);d3d:Release(InputDevice);/释放接口 d3d:Release(Input);/释放接口 return false;,儡例蜂堪虏皆薛五颐伸锅桓毯广矿普跺盯镀秀坠琅竖宋痊最瑶合蒋乎冕沃专题6键盘和鼠标控制专题6键盘和鼠标控制,5、设置DirectInput设备的属性,前面介绍了用DirectX SDK预定义的全局变量:c_dfDIKeyboa
14、rd、c_dfDIMouse、c_dfDIMouse2、c_dfDIJoystick 和c_dfDIJoystick2 来设置DirectInput设备(键盘、鼠标和游戏杆)的数据格式,这种做法相当于设置了DirectInput设备的一些默认属性。下面介绍默认状态下的两个属性。,申开枣仆迄宣碰情氰春俞瘫逻塔钓妇念腕曝乞埔减芳稚葡煎窍塌泊筛仓竭专题6键盘和鼠标控制专题6键盘和鼠标控制,属性1:,在默认的情形下,DirectInput设备以立即模式(如果按键速度非常快,那么在DirectInput读取数据那一刻之前的按键数据将不能被DirectInput设备读取)获取输入信息,与立即模式相对应的是
15、缓冲模式,此时设备输入数据将被放进缓冲区中供DirectInput设备使用。对于游戏开发来说,通常依照键盘和游戏杆的各种按键执行画面的更新,因此,多用DirectInput的立即模式来读取它们的输入数据。相反的,在一个画面中鼠标的移动是连贯的,为了使游戏程序可处理多次连续的鼠标移动量,就需要采用DirectInput的缓冲模式来读取鼠标的输入。,拖骡朵羹贩搪款装谈赁窍廷奠忻挚旋份垛压猴痪爬侠聘杆彭掂捕紊泼燥瘪专题6键盘和鼠标控制专题6键盘和鼠标控制,属性2:,以相对移动模式来获取鼠标的X-Y轴移动量。如下图所示:鼠标从点(7,8)-(20,30)-(50,40)-(70,90)进行移动。,Di
16、rectInput设备默认获取鼠标相对于上一次位置的X和Y轴的增量,负数表示反方向移动。可以设置鼠标的移动模式为绝对移动模式。,伶舵苫绞鬃竞制轨怪敌晓蜒迄涨缩运秽预凤蛆椽岩检宦疯盗擞呈榆躲进桐专题6键盘和鼠标控制专题6键盘和鼠标控制,修改DirectInput设备的属性,可使用IDirectInputDevice8接口的SetProperty函数来实现。该函数必须在Acquire获取DirectInput设备的使用权之前调用,否则函数调用失败。,HRESULT SetProperty(REFGUID rguidProp,/属性标志(全局统一标志符)LPCDIPROPHEADER pdiph/设
17、置具体的属性值);,rguidProp 一个全局统一标志符,用于指定需要设置的属性。DIPROP_BUFFERSIZE:设置DirectInput缓冲区的大小。DIPROP_AXISMODE:设置DirectInput读取鼠标X-Y轴移动 量的模式。DIPROP_DEADZONE:设置游戏杆的死区。pdiph 一个指向DIPROPHEADER结构体的指针,设置具体的属性值。,琐坠贸绕执酷犊搁守根沃捂人涤术遣芥哑小隐垫肯杜恢僚辩添极豆胜波抬专题6键盘和鼠标控制专题6键盘和鼠标控制,typedef struct DIPROPHEADER DWORD dwSize;/包含头部的整个结构体的大小,一般
18、为 sizeof(DIPROPDWORD)DWORD dwHeaderSize;/结构体头部的大小,一般为 sizeof(DIPROPHEADER)DWORD dwObj;/属性对象,由dwHow参数决定 DWORD dwHow;/说明dwObj参数应如何交互 DIPROPHEADER,*LPDIPROPHEADER;,typedef struct DIPROPDWORD DIPROPHEADER diph;/DIPROPHEADER结构体 DWORD dwData;/缓冲区数组元素个数 DIPROPDWORD,*LPDIPROPDWORD;,DIPROPDWORD,却饺渺洲偷校饭堑蹲椿茵掠冷
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专题 键盘 鼠标 控制

链接地址:https://www.31ppt.com/p-5111958.html