- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络游戏客户端程第15章
第十五章 游戏开发其他知识
游戏是一个非常复杂的软件,它包括很多技术,在之前的章节我们介绍的网络游戏客户端编程中的UI编程、图形渲染、网络编程、物理模拟等技术。然而游戏客户端还有很多重要的技术,本章就将介绍常用的几种技术,当然这些技术大都是以第三方库的形式直接提供,读者只要明白其原理,懂得应用方法就可以了。
目标
理解和掌握游戏程序接受用户输入的方法
理解和掌握DirectX Audio实现声音的方法
了解图片解码的相关知识
了解字体库FreeType的使用方法
了解资源打包相关的概念
15.1 DirectX Input 入门
输入相对于图形和声音而言从未成为游戏开发中的非常重要的论题。读取键盘按键、鼠标移动和游戏杆位置似乎并没有什么困难,但随着新输入设备对市场的强烈冲击以及DirectX的发行,这一问题变得日益重要了。dinput.h中定义,所以使用DirectInput需要包含dinput.h。
当我们需要使用DirectInput的时候需要创建DirectInput实例,使用下面语句就可以简单的创建DirectInput实例。
if( FAILED( hr = DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION,
IID_IDirectInput8, ( VOID** )g_pDI, NULL ) ) )
return hr;
其中DirectInput8Create函数原型是:
HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);
参数定义: hinst是使用DirectInput的程序的实例;
dwVersion是DirectInput的版本号;
riidltf是需要创建实例的接口的ID;
ppvOut用于返回DirectInput实例的地址;
punkOuter是用于返回IUnKnown接口,一般情况设置为NULL。
当我们需要从什么设备上获取输入信息的时候,我们需要创建设备接口。通过设备接口,我们可以通过设备接口来获取输入信息。下面就是使用DirectInput实例的CreateDevice方法创建设备接口的代码。
if( FAILED( g_pDI-CreateDevice( GUID_SysMouse, g_pMouse, NULL ) ) )
{
MessageBox( NULL, TEXT( Mouse not found. The sample will now exit. ),
TEXT( DirectInput Sample ),
MB_ICONERROR | MB_OK );
EndDialog( hDlg, 0 );
return S_OK;
}
其中CreateDevice函数原型是:
HRESULT CreateDevice( REFGUID rguid, LPDIRECTINPUTDEVICE *lplpDirectInputDevice, LPUNKNOWN pUnkOuter );rguid是用来指定需要创建的设备的类型ID,如GUID_SysMouse;
lplpDirectInputDevice用于返回设备接口的地址;
pUnkOuter是用于返回IUnKnown接口,一般情况设置为NULL。
从设备获取数据之前,必须先设置其数据格式。这只是一个在设备的状态改变后获取数据包并与已知结构进行匹配的问题。例如,从游戏杆得到的数据包显然和从鼠标那里得来的不一样:格式的大小不同,并且按照按钮和轴组合的不同有不同格式大小的值。if( FAILED( hr = g_pMouse-SetDataFormat( g_dfMouse ) ) )
return hr;
这里g_dfMouse是我们预先定义的DIDATAFORMAT类型变量。变量定义如下:
DIDATAFORMAT g_dfMouse =
{
sizeof( DIDATAFORMAT ),
sizeof( DIOBJECTDATAFORMAT ),
DIDF_ABSAXIS,
sizeof( MouseState
原创力文档


文档评论(0)