利用DirectInput实现多种输入装置的支持

透水石利用DirectInput实现多种输入装置的支持
l
7
舔∞诫实觋多入装置撩l|薯i
.弹普疆.瓣铆.|誊||毒毒蕞1誓0毫|薯露≯
摘要详细讲解在游戏设计中,利用DirectX组件DirectInput实现对键盘鼠标,摇杆等
控制并介绍有关编程模块.
关键词DirectInput,游戏设计,输入装置
,引言
在开发电脑游戏程序时,多媒体部分所使用的输入控制操
作装置多以键盘和鼠标为主.DirectInput是DirectX中负责输
入装置的成员,它除了支持基本的键盘和鼠标之外,还支持多
种摇杆等复杂的操作方式.
上一讲介绍的是DirectSound基本编程知识及射击游戏中
的Dsound.bas模块.本讲重点介绍DirectInput组件的相关编程
知识,射击游戏中的DIKeyBoard.bas模块(主要用于控制键盘
的操作),DIJoystick.bas模块(主要用控制摇杆的操作).
二,Directlnput简介
目前来讲,只要负责输入的装置不外乎有键盘,鼠标和摇
杆这三种类型,这样的分类是为了在程序编写时方便数据的声
明与使用,以免浪费了系统的资源,例如键盘和鼠标所用的数探针卡
据格式就有所不同.Directlnput在处理不同输入装置时,主要
将数据分为"按钮"与"轴"两种:键盘是属于"多按钮",
"无轴"操作装置,最简单的鼠标是属于"两按钮","两
轴"操作装置,摇杆是属于"多按钮","多轴"操作装置.
供墨系统要使用Directlnput时,开始的部分与使用DirectSound时类似,
也必须"声明DirectInput相关对象","建立DirectInput对
象","设定数据格式","设定协调层级".下面按不同的
输人装置,以简单完整的代码形式分别加以介绍.
1.键盘控制
下面制作一个小程序,利用Directlnput来直接取得键盘数
据,程序的作用是当按下数字键1—9时,会在标签中显示相
应的数字.如图1所示,程序的功能相当简单,目的在于使读
者可以专注于DirectInput的设定上.(注意:新建工程后,需
"工程引用复选DirectX7forVisualBasicTypeLibrary确
定"引用DirectX7.)实现代码如下:
图1键盘装置控制
DimobiDXAsNewDirectX7
DimobjD1AsDirectlnput
声明rectfnput对象objDI"
DimDiD~VAsDirectlnputDevice
声明DirectlnputDevice对象DIDev",一个对象代表一个
输入骞遭j譬警毫|薯l...
光源和物体表面材质的设置也应尽量和现实符合,当然为光和物体材质属性,只有对光照效果有一个深入的理解后,才
了得到特殊的效果,可以在某些方面进行夸张能清楚应当如何设置灯光和物体材质.
四,结语参考文献
该文通过具体的示例程序介绍了为Direct3D程序添加光照
效果的具体步骤,并根据作者的经验给出了几条使用光照效果
的建议供参考.对于光照效果的使用,关键是理解图形系统是
如何实现光照效果的,在具体编写程序代码时,只需要设置灯
1.陈卡.DirectX93D图形程序设计.上海科学技术出版
社,2003
2.MicrosoftCorporation.DirectXDocumentforC++.2006
(收稿日期:2007年4月16日)
…………………………………………………………
实用第一智慧密集DimKStateAsDlKEYBOARDSTA TE
声明'KStaten为DIKEYBOARDSTATE数据型态,用来
分别记录所读取到的键盘数据.~
PrivateSubForre_Load()
该模块用于键盘对象的建立与设定
Me.Show
SetobjDl=objDX.DirectlnputCreate()
从objDX中建立Directlnput对象"objDI". SetDIDevobjDI.CreateDevice(GUID_SysKeyboard)
从对象objDI中建立键盘装置对象"DIDev",需指定GUID值为"GUID_SysKeyboard". DIDevSetCommonDataFormatDIFORMAT_KEYBOARD
设定数据格式为键盘的数据格式.
DllDev.SetCOODerativeLevelMe.hWnd.
DISCL_FOREGROUNDOrDISCL_NONEXCLUSIVE
设定协调级为"背景可执行"与"非独占模式".
i3dgDiDeV.Acquire?
向系统取得装置使用权.
EndSub
--
PrivateSub1_imerlJimer()
DIDev:GetDeviceStateKeVbOardKState
生物航煤
取得键盘装置的数据并存入"KState"中.
Fori=2To10
利用"Key"来判断是哪一个键被按下.
1fKState,Key(i);128Then
LabeH.Caption=i一1
在Label1显示被按下键代表的数字.
End
Next_,
EndSbb
PrivateSubFormUnload(CancelAsInteger)
DIDev.Unacquire
在程序结束时需要用"Unacquire"来归还使用权.
EndSub
2.鼠标控制
利用DimctInput来直接取得鼠标数据,与取得键盘数据类似.当用鼠标左键单击窗体空白处时数字会增大,单击右键时数字会减小,实现效果如图2所示.代码如下:
图2鼠标装置控制
DimobjDXAsNewDirectX7
DimobjDIAsDirectlnput
蔷与
DimDlDevAsIDirectlnputDevice DimKStateAsDIKEYBOARDSTA TE
QimDIStateAsD\MOUSESTAE|
声明DIState"为DIMOUSESTATE数据型杰r用来记录所读取到的鼠标数据.一-
DimiAsLong
PrivateSubForm_Load()
该模块用于鼠标对象的建立与设定
Me.Show
SetobjDI=objDX.DirectlnoutCreate()
SetDIDev=objDI.CreateDevice(GUID_SysMouse",
从对象objDI中建立鼠标装置对象"DIDev",需指定GUlD值GUID_SysMouse.
DIDev.SetCommonDataFormatDIFORMAT_MOUSE
设定数据格式为鼠标的数据格式.
DIDev.SetCOoperativeLeveIMe.hWnd1.
DISCL_
FOREGROUNDOrDISCL_NONEXCLUSlYE
DlDev.Acquire
=1
EndSub
PrivateSubTimer1Jimer() DIDevGetDeviceStateMouseDlState
取得鼠标装置的数据并存入"DlState"中. lfDIStatebuttons(0)=128Then
Label2.FontSize=72
Label2.Caption=i
i=i+1
lfi>9Theni=1
EndIf
lfDIState.buttons(1)=128Then
Label2.Fonl:Size=36
无线视频服务器
Label2.Caption=i
i=i一1
lfi<1Theni=9
End\If
End:Sub
PrivateSubForm_unload(CancelAsInteger)
DIDev.Unacquire
EndSub

本文发布于:2024-09-21 19:07:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/204265.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:装置   键盘   鼠标   程序   数据   使用   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议