Visual C++游戏开发笔记二十三 游戏基础物理建模五 粒子系统模拟二Word格式文档下载.docx
- 文档编号:6503922
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:23
- 大小:729.09KB
Visual C++游戏开发笔记二十三 游戏基础物理建模五 粒子系统模拟二Word格式文档下载.docx
《Visual C++游戏开发笔记二十三 游戏基础物理建模五 粒子系统模拟二Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Visual C++游戏开发笔记二十三 游戏基础物理建模五 粒子系统模拟二Word格式文档下载.docx(23页珍藏版)》请在冰点文库上搜索。
//星光是否存在
9.}flystar[50];
6个成员分别为,粒子坐标两个值,粒子方向两个值,持续时间lasted,和粒子是否存在的标识exist。
3.核心代码讲解
最重要的当然是我们的MyPaint()绘图函数:
1.//全局变量声明
2.HINSTANCE
hInst;
3.HBITMAP
bg,star,mask;
//用于贴图的三个HBITMAP变量
4.HDC
hdc,mdc,bufdc;
5.HWND
hWnd;
6.RECT
rect;
7.int
i,count;
//定义count用于计数
9.
10.//****自定义绘图函数*********************************
11.//
1.窗口贴图
12.//
2.实现星光绽放的效果
13.void
MyPaint(HDC
hdc)
14.{
15.
16.
17.
18.
19.//创建粒子
20.
if(count
==
0)
//随机设置爆炸点
21.
{
22.
x=rand()%rect.right;
23.
y=rand()%rect.bottom;
24.
for(i=0;
i<
50;
i++)
//产生星光粒子
25.
26.
flystar[i].x
=
27.
flystar[i].y
28.
flystar[i].lasted
0;
//设定该粒子存在的时间为零
29.
if(i%2==0)
//按粒子编号i来决定粒子在哪个象限运动,且x,y方向的移动速度随机为1—15之间的一个值,由1+rand()%15来完成。
30.
31.
flystar[i].vx
-(1+rand()%15);
32.
flystar[i].vy
33.
}
34.
if(i%2==1)
35.
36.
1+rand()%15;
37.
38.
39.
if(i%4==2)
40.
41.
42.
43.
44.
if(i%4==3)
45.
46.
47.
48.
49.
flystar[i].exist
true;
//设定粒子存在
50.
51.
count
//50个粒子由for循环设置完成后,我们将粒子数量设为50,代表目前有50颗星光
52.
53.
54.
//先在内存dc中贴上背景图片
55.
SelectObject(bufdc,bg);
56.
BitBlt(mdc,0,0,rect.right,rect.bottom,bufdc,0,0,SRCCOPY);
57.
58.
59.
60.
61.
if(flystar[i].exist)
//判断粒子是否还存在,若存在,则根据其坐标(flystar[i].x,flystar[i].y)进行贴图操作
62.
63.
SelectObject(bufdc,mask);
64.
BitBlt(mdc,flystar[i].x,flystar[i].y,30,30,bufdc,0,0,SRCAND);
65.
SelectObject(bufdc,star);
66.
BitBlt(mdc,flystar[i].x,flystar[i].y,30,30,bufdc,0,0,SRCPAINT);
67.
68.
69.
//计算下一次贴图的坐标
70.
flystar[i].x+=flystar[i].vx;
71.
flystar[i].y+=flystar[i].vy;
72.
73.
74.
//在每进行一次贴图后,将粒子的存在时间累加1.
75.
flystar[i].lasted++;
76.
//进行条件判断,若某粒子跑出窗口区域一定的范围,则将该粒子设为不存在,且粒子数随之递减
77.
if(flystar[i].x<
=-10
||
flystar[i].x>
rect.right
flystar[i].y<
flystar[i].y>
rect.bottom
flystar[i].lasted>
50)
78.
79.
false;
//删除星光粒子
80.
count--;
//递减星光总数
81.
82.
83.
84.
85.//将mdc中的全部内容贴到hdc中
86.
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
87.
88.
89.}
相关的书写思路在代码注释中浅墨已经写得比较清晰了。
这段代码的书写整体思路即:
第一步,判断粒子是否创建,若星光数量count不为0,则直接跳到第四步进行相关贴图操作。
否则需按每步顺序完成粒子的初始化。
第二步,随机设置绽放点。
第三步,创建各个粒子(为结构体各属性赋值)。
第四步,在内存dc上贴上背景图片。
第五步,对各个粒子进行贴图操作并
第六步,对某些值,如count,exist进行特殊的处理
第七步,将mdc(内存dc)中的内容贴到hdc中,完成最后在屏幕上的显示。
二、详细注释的源代码欣赏
OK,讲解完成,现在我们就贴出详细注释的源代码:
1.#include
"
stdafx.h"
2.#include
<
stdio.h>
4.//全局变量声明
5.HINSTANCE
6.HBITMAP
7.HDC
8.HWND
9.RECT
10.int
11.
12.
13.
14.
15.struct
16.{
19.
23.}flystar[50];
26.//全局函数声明
27.ATOM
MyRegisterClass(HINSTANCE
hInstance);
28.BOOL
InitInstance(HINSTANCE,
int);
29.LRESULT
CALLBACK
WndProc(HWND,
UINT,
WPARAM,
LPARAM);
30.void
hdc);
32.//****WinMain函数,程序入口点函数**************************************
33.int
APIENTRY
WinMain(HINSTANCE
hInstance,
HINSTANCE
hPrevInstance,
LPSTR
lpCmdLine,
nCmdShow)
37.{
MSG
msg;
MyRegisterClass(hInstance);
//初始化
if
(!
InitInstance
(hInstance,
nCmdShow))
return
FALSE;
//消息循环
while
(GetMessage(&
msg,
NULL,
0,
0))
TranslateMessage(&
msg);
DispatchMessage(&
msg.wParam;
57.}
59.//****设计一个窗口类,类似填空题,使用窗口结构体*********************
60.ATOM
hInstance)
61.{
WNDCLASSEX
wcex;
wcex.cbSize
sizeof(WNDCLASSEX);
wcex.style
CS_HREDRAW
|
CS_VREDRAW;
wcex.lpfnWndProc
(WNDPROC)WndProc;
wcex.cbClsExtra
wcex.cbWndExtra
wcex.hInstance
hInstance;
wcex.hIcon
NULL;
wcex.hCursor
LoadCursor(NULL,
IDC_ARROW);
wcex.hbrBackground
(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName
wcex.lpszClassName
maple"
;
wcex.hIconSm
RegisterClassEx(&
wcex);
79.}
81.//****初始化函数*************************************
82.//
1.加载位图资源
83.//
2.取得内部窗口区域信息
84.BOOL
InitInstance(HINSTANCE
85.{
HBITMAP
bmp;
hInst
89.
hWnd
CreateWindow("
浅墨的绘图窗口"
WS_OVERLAPPEDWINDOW,
90.
CW_USEDEFAULT,
NULL);
91.
92.
hWnd)
93.
94.
95.
96.
97.
MoveWindow(hWnd,10,10,600,450,true);
98.
ShowWindow(hWnd,
nCmdShow);
99.
UpdateWindow(hWnd);
100.
101.
hdc
GetDC(hWnd);
102.
mdc
CreateCompatibleDC(hdc);
103.
104.
bufdc
105.
bmp
CreateCompatibleBitmap(hdc,640,480);
106.
107.
SelectObject(mdc,bmp);
108.
109.
110.
111.
112.
bg
(HBITMAP)LoadImage(NULL,"
bg.bmp"
IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);
113.
star
star.bmp"
IMAGE_BITMAP,30,30,LR_LOADFROMFILE);
114.
mask
mask.bmp"
115.
GetClientRect(hWnd,&
rect);
116.
117.
118.
119.
SetTimer(hWnd,1,0,NULL);
120.
121.
MyPaint(hdc);
122.
123.
TRUE;
124.}
125.
126.//****自定义绘图函数*********************************
127.//
128.//
129.void
130.{
131.
132.
133.//创建粒子
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
BitBlt(mdc,flystar[i].x,flystar[i].y,30,30,bufdc,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+游戏开发笔记二十三 游戏基础物理建模五 粒子系统模拟二 C+ 游戏 开发 笔记 十三 基础 物理 建模 粒子 系统 模拟
链接地址:https://www.bingdoc.com/p-6503922.html