VC++ 游戏编程背景动画设计Word格式文档下载.docx
- 文档编号:15855214
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:10
- 大小:521.51KB
VC++ 游戏编程背景动画设计Word格式文档下载.docx
《VC++ 游戏编程背景动画设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VC++ 游戏编程背景动画设计Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
=
0,
y
0;
HBITMAPmap;
HDChmdc,mdc;
HWNDhWnd;
DWORDtPre,tNow;
intx=0,y=0;
这里声明x,y来表示获取DC的屏幕原点:
BitBlt(hdc,0,0,640,480,mdc,x,y,SRCCOPY);
消息处理函数WndProc()函数中
1.case
WM_KEYDOWN:
//
响应各个方向键的操作
2.
switch(wParam)
3.
{
4.
case
VK_UP:
5.
-=
20;
6.
if
(y
<
0)
7.
8.
break;
9.
VK_DOWN:
10.
+=
11.
>
660)
12.
660;
13.
14.
VK_LEFT:
15.
16.
(x
17.
18.
19.
VK_RIGHT:
20.
21.
910)
22.
910;
23.
24.
}
25.
caseWM_KEYDOWN:
//响应各个方向键的操作
switch(wParam)
{
caseVK_UP:
y-=20;
if(y<
0)
y=0;
break;
caseVK_DOWN:
y+=20;
if(y>
660)
y=660;
caseVK_LEFT:
x-=20;
if(x<
x=0;
caseVK_RIGHT:
x+=20;
if(x>
910)
x=910;
}
break;
运行后通过操作方向键可以控制查看地图的位置
(二)、循环背景动画
循环背景动画师不断的进行背景图的裁切与接合,然后显示在窗口上所产生的一种背景画面的循环滚动效果。
下面来介绍这种动画效果的制作。
如上图,在背景图向右移动时,屏幕会出现“缝隙”,所以我们就是要把移出屏幕的图贴到缝隙中来。
这样子循环后,就可以看到在空中飞行的效果了。
由上面的分析,我们的工作就是两次贴图。
第一步,裁取原始背景图右边部分进行贴图操作到另一个DC中,假设目前裁取的右边部分的宽度为x,如图:
第二步,采取原始背景图左边部分进行贴图操作到上一个DC中,完成了向右滚动接合后的新背景图。
第三步,将接合后的背景图显示在窗口中,之后递增x值,进行循环操作。
当x大于等于背景图后,就将x的值重设为0,继续重复循环。
这样子就形成了背景循环效果。
利用一张640*480的背景图,制作由左向右的循环滚动的动画
程序代码:
全局变量:
bg;
mdc,
buffdc;
y=0;
HBITMAPbg;
HDChmdc,mdc,buffdc;
intx=0;
第五行,用xy来记录被裁取的左上角点的坐标,初始值为(0,0),表示第一次显示时是在最左上角。
1.BOOL
InitInstance(HINSTANCE
hInstance,
int
nCmdShow)
2.{
3.//
HWND
HBITMAP
bmp;
//用于建立兼容位图
hInst
hInstance;
将实例句柄存储在全局变量中
hWnd
CreateWindow(szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
NULL,
NULL);
(!
hWnd)
return
FALSE;
MoveWindow(hWnd,
10,
640,
480,
true);
ShowWindow(hWnd,
nCmdShow);
UpdateWindow(hWnd);
hmdc
GetDC(hWnd);
mdc
CreateCompatibleDC(hmdc);
buffdc
//建立和窗口兼容的位图
bmp
CreateCompatibleBitmap(hmdc,
480);
26.
SelectObject(mdc,
bmp);
27.
28.
bg
(HBITMAP)LoadImage(NULL,
L"
bg.bmp"
IMAGE_BITMAP,
LR_LOADFROMFILE);
29.
SelectObject(buffdc,
bg);
30.
31.
MyPaint(hmdc);
32.
33.
TRUE;
34.}
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
{
//HWNDhWnd;
HBITMAPbmp;
//用于建立兼容位图
hInst=hInstance;
//将实例句柄存储在全局变量中
hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if(!
hWnd)
{
returnFALSE;
}
MoveWindow(hWnd,10,10,640,480,true);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
hmdc=GetDC(hWnd);
mdc=CreateCompatibleDC(hmdc);
buffdc=CreateCompatibleDC(hmdc);
//建立和窗口兼容的位图
bmp=CreateCompatibleBitmap(hmdc,640,480);
SelectObject(mdc,bmp);
bg=(HBITMAP)LoadImage(NULL,L"
IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
SelectObject(buffdc,bg);
MyPaint(hmdc);
returnTRUE;
}
1.void
MyPaint(HDC
hdc)
截取背景图右边的部分
BitBlt(mdc,
x,
buffdc,
640-x,
SRCCOPY);
截取背景图左边部分进行贴图
将结合后的背景图贴到窗口
BitBlt(hdc,
tPre
GetTickCount();
获得持续时间
10;
==
640)
16.}
voidMyPaint(HDChdc)
//截取背景图右边的部分
BitBlt(mdc,0,0,x,480,buffdc,640-x,0,SRCCOPY);
//截取背景图左边部分进行贴图
BitBlt(mdc,x,0,640-x,480,buffdc,0,0,SRCCOPY);
//将结合后的背景图贴到窗口
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
tPre=GetTickCount();
//获得持续时间
x+=10;
if(x==640)
x=0;
每次调用MyPaint()函数都会进行图形切割合并,并显示在窗口上。
运行结果:
会看到图像在向右循环滚动,感觉就是自己在空中快速飞行一样。
二.多背景卷动
多背静循环动画的背景循环原理其实与上面说过的单背景循环的原理相同。
不过由于不同的背景在远近层次上及实际视觉移动速度上不相同,因此在以贴图的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC+ 游戏编程背景动画设计 VC 游戏 编程 背景 动画设计