VC++2010游戏开发随记之四十二 - 图文(6)

2020-02-21 11:24

31. //鼠标滚轮,为观察点收缩操作

32. fPosZ += g_diMouseState.lZ * 0.02f; 33. 34.

35. // 平移物体

36. if (g_pKeyStateBuffer[DIK_A] & 0x80) fPosX -= 0.005f; 37. if (g_pKeyStateBuffer[DIK_D] & 0x80) fPosX += 0.005f; 38. if (g_pKeyStateBuffer[DIK_W] & 0x80) fPosY += 0.005f; 39. if (g_pKeyStateBuffer[DIK_S] & 0x80) fPosY -= 0.005f; 40. 41. 42. 43.

44. D3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ); 45. 46. 47. 48.

49. // 按住鼠标右键并拖动,为旋转操作

50. static float fAngleX = 0.15f, fAngleY = -(float)D3DX_PI ; 51. if (g_diMouseState.rgbButtons[1] & 0x80) 52. {

53. fAngleX += g_diMouseState.lY * -0.01f; 54. fAngleY += g_diMouseState.lX * -0.01f; 55. }

56. // 旋转物体

57. if (g_pKeyStateBuffer[DIK_UP] & 0x80) fAngleX += 0.005f;

58. if (g_pKeyStateBuffer[DIK_DOWN] & 0x80) fAngleX -= 0.005f;

59. if (g_pKeyStateBuffer[DIK_LEFT] & 0x80) fAngleY -= 0.005f;

60. if (g_pKeyStateBuffer[DIK_RIGHT] & 0x80) fAngleY += 0.005f;

61. 62. 63. 64.

65. D3DXMATRIX Rx, Ry;

66. D3DXMatrixRotationX(&Rx, fAngleX); 67. D3DXMatrixRotationY(&Ry, fAngleY); 68. 69.

70. g_matWorld = Rx * Ry * g_matWorld;

71. g_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld); 72. Matrix_Set(); 73. }

嗯,讲解完成,下面我们就贴出完整的详细注释的demo的源代码:

[cpp] view plaincopyprint?

1. //***************************************************************

************************** 2. //

3. //【Visual C++】游戏开发笔记系列配套源码 四十二 浅墨DirectX教程之十 游戏

输入控制利器 : DirectInput专场 4. // VS2010版

5. // 2012年 1月27日 Create by 浅墨 6. //图标及图片素材: 《仙剑奇侠传五前传》 瑕 7. //此刻心情:既然选择了远方,便只顾风雨兼程 8. //

9. //***************************************************************

************************** 10. 11.

12. //**************************************************************

*************************** 13. // Desc: 宏定义部分

14. //**************************************************************

***************************

15. #define SCREEN_WIDTH 800 //为窗口宽度定义的

宏,以方便在此处修改窗口宽度

16. #define SCREEN_HEIGHT 600 //为窗口高度定

义的宏,以方便在此处修改窗口高度

17. #define WINDOW_TITLE _T(\【Visual C++游戏开发笔记】博文配套demo之

四十二 浅墨DirectX教程之十 游戏输入控制利器 : DirectInput专场\为窗口标题定义的宏

18. #define DIRECTINPUT_VERSION 0x0800 //指定DirectInput版本,防止

DIRECTINPUT_VERSION undefined警告

19. #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }

//自定义一个SAFE_RELEASE()宏,便于COM资源的释放

20. #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } 21.

22.

23. //**************************************************************

*************************** 24. // Desc: 头文件定义部分

25. //**************************************************************

*************************** 26. #include 27. #include 28. #include 29. #include

30. #include // 使用DirectInput必须包含的头

文件,注意这里没有8 31. 32. 33. 34.

35. //**************************************************************

*************************** 36. // Desc: 库文件定义部分

37. //**************************************************************

*************************** 38. #pragma comment(lib,\ 39. #pragma comment(lib,\

40. #pragma comment(lib, \使用DirectInput必须包含

的头文件,注意这里有8

41. #pragma comment(lib,\ 42. #pragma comment(lib, \ 43. 44. 45. 46. 47.

48. //**************************************************************

*************************** 49. // Desc: 全局变量声明部分

50. //**************************************************************

***************************

51. LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D设备对象 52. LPD3DXFONT g_pTextFPS =NULL; //

字体COM接口

53. LPD3DXFONT g_pTextAdaperName = NULL; //

显卡信息的2D文本

54. LPD3DXFONT g_pTextHelper = NULL; // 帮助信

息的2D文本

55. LPD3DXFONT g_pTextInfor = NULL; // 绘制信

息的2D文本

56. float g_FPS = 0.

0f; //一个浮点型的变量,代表帧速率

57. wchar_t g_strFPS[50]={0}; //包含帧速率的字符数

58. wchar_t g_strAdapterName[60]={0}; //包含显卡名称的字

符数组 59.

60. LPDIRECTINPUT8 g_pDirectInput = NULL; // 61. LPDIRECTINPUTDEVICE8 g_pMouseDevice = NULL; 62. DIMOUSESTATE g_diMouseState = {0}; 63. LPDIRECTINPUTDEVICE8 g_pKeyboardDevice = NULL; 64. char g_pKeyStateBuffer[256] = {0}; 65. D3DXMATRIX g_matWorld; //世界矩阵 66.

67. LPD3DXMESH g_pMesh = NULL; // 网格的对象

68. D3DMATERIAL9* g_pMaterials = NULL; // 网格的材质信息 69. LPDIRECT3DTEXTURE9* g_pTextures = NULL; // 网格的纹理信息 70. DWORD g_dwNumMtrls = 0; // 材质的数目 71.

72. //**************************************************************

*************************** 73. // Desc: 全局函数声明部分

74. //**************************************************************

***************************

75. LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wPa

ram, LPARAM lParam );

76. HRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)

;

77. HRESULT Objects_Init();

78. void Direct3D_Render( HWND hwnd); 79. void Direct3D_Update( HWND hwnd); 80. void Direct3D_CleanUp( ); 81. float Get_FPS(); 82. void Matrix_Set();

83. BOOL Device_Read(IDirectInputDevice8 *pDIDevice, void* pBuffer,

long lSize) ; 84. 85.

86. //**************************************************************

***************************

87. // Name: WinMain( )

88. // Desc: Windows应用程序入口函数

89. //**************************************************************

***************************

90. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int nShowCmd) 91. { 92.

93. //开始设计一个完整的窗口类

94. WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX

定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化

95. wndClass.cbSize = sizeof( WNDCLASSEX ) ; //设置结构体的字节

数大小

96. wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式 97. wndClass.lpfnWndProc = WndProc; //设置指向窗口过程

函数的指针

98. wndClass.cbClsExtra = 0; 99. wndClass.cbWndExtra = 0; 100. 101.

wndClass.hInstance = hInstance; //指定包含窗口 wndClass.hIcon=(HICON)::LoadImage(NULL,_T(\),IMA

过程的程序的实例句柄。

GE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //从全局的::LoadImage函数从本地加载自定义ico图标 102. 103.

wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); //指 wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH)定窗口类的光标句柄。

; //为hbrBackground成员指定一个灰色画刷句柄 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114.

wndClass.lpszMenuName = NULL; //用一 wndClass.lpszClassName = _T(\);

if( !RegisterClassEx( &wndClass ) ) //设计完窗 return -1;

HWND hwnd = CreateWindow( _T(\), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, SC SCREEN_HEIGHT, NULL, NULL, hInstance, NULL );

个以空终止的字符串,指定菜单资源的名字。

//用一个以空终止的字符串,指定窗口类的名字。

口后,需要对窗口类进行注册,这样才能创建该类型的窗口

WINDOW_TITLE, //喜闻乐见的创建窗口函数CreateWindow REEN_WIDTH,


VC++2010游戏开发随记之四十二 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:船舶管理笔记(1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: