Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx

上传人:b****4 文档编号:17305152 上传时间:2022-12-01 格式:DOCX 页数:15 大小:356.98KB
下载 相关 举报
Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx_第1页
第1页 / 共15页
Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx_第2页
第2页 / 共15页
Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx_第3页
第3页 / 共15页
Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx_第4页
第4页 / 共15页
Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx

《Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

Visual C++游戏开发笔记二十一 游戏基础物理建模三 摩擦力系统模拟Word文档下载推荐.docx

>

rect.bottom-70) 

//判断是否触地,如果触碰到窗口边界,进行调整 

12. 

13. 

rect.bottom 

70;

14. 

15. 

//X轴方向的摩擦力处理 

16. 

vx 

fx;

// 

vx=fx+vx;

这里fx为负值,所以每调用一次MyPiant(),vx恒定减小一个fx 

17. 

if(vx 

<

0) 

//当vx值递减到小于0时,就将其设为0,即小球在X方向不再移动。

18. 

0;

19. 

20. 

//Y轴方向摩擦力处理 

21. 

fy;

//vy=fy+vy;

这里fy同样为负值,所以每调用一次MyPiant(),vy恒定减小一个fy 

22. 

if(vy 

//若速度减到小于等于0,置为零,即小球在Y方向不再移动。

23. 

24. 

25. 

-vy;

这段代码里面小鸟由高出下落触及地面进行反弹,且存在落地时的摩擦力,使得小鸟在落地弹跳后速度减慢,最后呈现静止的状态,停在窗口边缘。

二.神级游戏作品《暗黑破坏神Ⅲ》的介绍

既然已经提到了这款革命性的作品,我们就来介绍一下,即将在2012年5月15日全球上市的神级作品——《暗黑破坏神Ⅲ》

(DIABLOⅢ)(浅墨习惯称作大菠萝3,呵呵)。

当然《暗黑破坏神Ⅲ》是由我们无所不能的C++来开发的~

浅墨在这里不打算花大篇幅介绍,就简明扼要地提一下吧。

先贴一张暗黑破坏神Ⅲ的封面美图:

暗黑Ⅲ用C++编程语言开发(C++由于其执行的高效性,一直是中大型游戏开发的统治性编程语言),采用暴雪自家定制的

3D图形引擎,物理引擎采用Havok,于PC和Mac两个平台发售,并暂时不会登陆XBOX360及PlayStation等家用机平台。

《暗黑破坏神3》对于DirectX11进行了特殊的优化和加速,官方推荐使用WindowsVista或者Windows 

7来进行游戏以便获

得更好的体验效果。

正所谓“暴雪出品,必属精品”,昨天浅墨偶尔看了下暗黑3五种职业的技能介绍视频,看完后热血沸腾,暴雪真的是没有辜

负广大暗黑粉丝这么多年的等待,用心做出了这么一款任何溢美之词都无法形容其精美的天赐之作。

暗黑Ⅲ有诸多新的亮点,让暗黑系列的动作角色扮演游戏体验达到一个新的高度,浅墨在这里列一些出来:

  

★五种强大的职业可供选择,包括野蛮人、巫医、法师、武僧以及恶魔猎手  

★全新3D图像引擎将带来无与伦比的视觉效果,Havok物理引擎技术  

★Sanctuary世界变幻莫测的室内外场景  

★极具互动性的游戏环境,危险的陷阱与障碍,可被破坏的元素  

★随机产生的事件与场景,带来无止境的动态游戏体验  

★种类繁多的具有独特攻击方式和习性的恶魔与怪物  

★全新任务系统加上角色定制选项,带来终极动作RPG体验  

★可通过BN进行多人联网合作或对战

这张图是其中四种职业的合照(原本五职业),目测少了“恶魔猎手”这一帅气的职业:

更多内容去请大家前去

3.详细注释的源代码欣赏

好了回到我们的主题摩擦力吧,为了演示的方便直观,我们选择将笔记二十源码的一些内容进行更改,在其基础上模拟实现出摩擦力系统的效果。

依旧是国际惯例,贴出详细注释的源代码:

1.#include 

"

stdafx.h"

2.#include 

stdio.h>

3. 

5.//全局变量 

6.HINSTANCE 

hInst;

7.HBITMAP 

bg,angrybird;

8.HDC 

hdc,mdc,bufdc;

9.HWND 

hWnd;

10.DWORD 

tPre,tNow,tCheck;

11.RECT 

rect;

12.int 

14.int 

16.//全局函数 

17.ATOM 

MyRegisterClass(HINSTANCE 

hInstance);

18.BOOL 

InitInstance(HINSTANCE, 

int);

19.LRESULT 

CALLBACK 

WndProc(HWND, 

UINT, 

WPARAM, 

LPARAM);

20.void 

MyPaint(HDC 

hdc);

22.//****WinMain函数,程序入口点函数************************************** 

23.int 

APIENTRY 

WinMain(HINSTANCE 

hInstance, 

HINSTANCE 

hPrevInstance, 

LPSTR 

lpCmdLine, 

26. 

int 

nCmdShow) 

27.{ 

28. 

MSG 

msg;

29. 

30. 

MyRegisterClass(hInstance);

31. 

32. 

//初始化 

33. 

if 

(!

InitInstance 

(hInstance, 

nCmdShow)) 

34. 

35. 

return 

FALSE;

36. 

37. 

38. 

//消息循环 

39. 

GetMessage(&

msg,NULL,NULL,NULL);

//初始化msg 

40. 

while( 

msg.message!

=WM_QUIT 

) 

41. 

42. 

if( 

PeekMessage( 

&

msg, 

NULL, 

0,0 

PM_REMOVE) 

43. 

44. 

TranslateMessage( 

msg 

);

45. 

DispatchMessage( 

46. 

47. 

else 

48. 

49. 

tNow 

GetTickCount();

50. 

if(tNow-tPre 

50) 

51. 

MyPaint(hdc);

52. 

53. 

54. 

55. 

msg.wParam;

56.} 

57. 

58.//****设计一个窗口类,类似填空题,使用窗口结构体********************* 

59.ATOM 

hInstance) 

60.{ 

61. 

WNDCLASSEX 

wcex;

62. 

63. 

wcex.cbSize 

sizeof(WNDCLASSEX);

64. 

wcex.style 

CS_HREDRAW 

CS_VREDRAW;

65. 

wcex.lpfnWndProc 

(WNDPROC)WndProc;

66. 

wcex.cbClsExtra 

67. 

wcex.cbWndExtra 

68. 

wcex.hInstance 

hInstance;

69. 

wcex.hIcon 

NULL;

70. 

wcex.hCursor 

71. 

LoadCursor(NULL, 

IDC_ARROW);

72. 

wcex.hbrBackground 

(HBRUSH)(COLOR_WINDOW+1);

73. 

wcex.lpszMenuName 

74. 

wcex.lpszClassName 

maple"

;

75. 

wcex.hIconSm 

76. 

77. 

RegisterClassEx(&

wcex);

78.} 

79. 

80.//****初始化函数************************************* 

81.// 

1.加载位图资源 

82.// 

2.取得内部窗口区域信息 

83.BOOL 

InitInstance(HINSTANCE 

84.{ 

85. 

HBITMAP 

bmp;

86. 

hInst 

87. 

88. 

hWnd 

CreateWindow("

 

浅墨的窗口"

WS_OVERLAPPEDWINDOW, 

89. 

CW_USEDEFAULT, 

0, 

NULL);

90. 

91. 

hWnd) 

92. 

93. 

94. 

95. 

96. 

MoveWindow(hWnd,10,10,750,420,true);

97. 

ShowWindow(hWnd, 

nCmdShow);

98. 

UpdateWindow(hWnd);

99. 

100. 

hdc 

GetDC(hWnd);

101. 

mdc 

CreateCompatibleDC(hdc);

102. 

bufdc 

103. 

bmp 

CreateCompatibleBitmap(hdc,750,400);

104. 

105. 

SelectObject(mdc,bmp);

106. 

107. 

bg 

(HBITMAP)LoadImage(NULL,"

bg.bmp"

IMAGE_BITMAP,750,400,LR_LOADFROMFILE);

108. 

angrybird 

angrybird.bmp"

IMAGE_BITMAP,140,70,LR_LOADFROMFILE);

109. 

110. 

111. 

GetClientRect(hWnd,&

rect);

112. 

113. 

114. 

115. 

TRUE;

116.} 

117. 

118.//****自定义绘图函数********************************* 

119.// 

1.窗口贴图 

120.// 

2.根据小球的运动状态计算速度与贴图坐标 

121.void 

hdc) 

122.{ 

123. 

SelectObject(bufdc,bg);

124. 

BitBlt(mdc,0,0,750,400,bufdc,0,0,SRCCOPY);

125. 

126. 

SelectObject(bufdc,angrybird);

127. 

BitBlt(mdc,x,y,70,70,bufdc,70,0,SRCAND);

128. 

BitBlt(mdc,x,y,70,70,bufdc,0,0,SRCPAINT);

129. 

130. 

BitBlt(hdc,0,0,750,400,mdc,0,0,SRCCOPY);

131. 

132. 

133. 

134. 

135. 

136. 

137. 

138. 

139. 

140. 

141. 

142. 

143. 

144. 

145. 

146. 

147. 

148. 

//若速度减到小于等于0,置为零,即小球在X方向不再移动。

149. 

150. 

151. 

152. 

153. 

154. 

tPre 

//记录此次时间 

155.} 

156. 

157.//****消息处理函数*********************************** 

158.LRESULT 

WndProc(HWND 

hWnd, 

UINT 

message, 

WPARAM 

wParam, 

LPARAM 

lParam) 

159.{ 

160. 

switch 

(message) 

161. 

162. 

case 

WM_KEYDOWN:

//按键消息 

 

163. 

if(wParam==VK_ESCAPE) 

//按下【Esc】键 

164. 

PostQuitMessage(0);

165. 

break;

166. 

WM_DESTROY:

//窗口结束消息 

167. 

DeleteDC(mdc);

168. 

DeleteDC(bufdc);

169. 

DeleteObject(bg);

170. 

DeleteObject(angrybird);

171. 

ReleaseDC(hWnd,hdc);

172. 

173. 

174. 

default:

//其他消息 

175. 

DefWindowProc(hWnd, 

lParam);

176. 

177. 

178.} 

下面是运行时的截图:

最后小鸟能量耗尽,停留在窗口边缘的地面上。

这里感谢gh402兄的建议,我们将之前小鸟的正面的平面效果图换成了带点3D效果的侧面图,使运行结果更加逼真了。

本节即到这里了,下面依旧是放出两个版本的源代码供大家下载学习)(当然,必须是零资源分下载^^):

本篇文章VS2010版的源码请点击这里下载:

【VS2010版】【VisualC++】Code_Note_21

本篇文章VC6.0版的源码请点击这里下载:

【VC6.0版】【VisualC++】Code_Note_21

感谢一直支持【VisualC++】游戏开发笔记系列专栏的朋友们,也恳请大家继续关注我的专栏。

目前在讲的GDI只是前奏。

DirectX11会在GDI梳理完后进行深入讲解,敬请期待~~

【VisualC++】游戏开发系列文章才刚刚展开一点而已,因为游戏世界实在是太博大精深了~

但我们不能着急,得慢慢打好基础。

做学问最忌好高骛远,不是吗?

浅墨希望看到大家的留言,希望与大家共同交流,希望得到睿智的评论(即使是批评)。

你们的支持是我写下去的动力~

精通游戏开发的路还很长很长,非常希望能和大家一起交流,共同学习,共同进步。

大家看过后觉得值得一看的话,可以顶一下这篇文章,你们的支持是我继续写下去的动力~

如果文章中有什么疏漏的地方,也请大家指正。

也希望大家可以多留言来和我探讨相关的问题。

最后,谢谢你们一直的支持~~~

 

——————————浅墨于2012年5月10日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1