VC++ 游戏编程背景动画设计Word格式文档下载.docx

上传人:b****5 文档编号:15855214 上传时间:2022-11-16 格式:DOCX 页数:10 大小:521.51KB
下载 相关 举报
VC++ 游戏编程背景动画设计Word格式文档下载.docx_第1页
第1页 / 共10页
VC++ 游戏编程背景动画设计Word格式文档下载.docx_第2页
第2页 / 共10页
VC++ 游戏编程背景动画设计Word格式文档下载.docx_第3页
第3页 / 共10页
VC++ 游戏编程背景动画设计Word格式文档下载.docx_第4页
第4页 / 共10页
VC++ 游戏编程背景动画设计Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

VC++ 游戏编程背景动画设计Word格式文档下载.docx

《VC++ 游戏编程背景动画设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VC++ 游戏编程背景动画设计Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

VC++ 游戏编程背景动画设计Word格式文档下载.docx

0, 

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()函数都会进行图形切割合并,并显示在窗口上。

运行结果:

会看到图像在向右循环滚动,感觉就是自己在空中快速飞行一样。

二.多背景卷动

多背静循环动画的背景循环原理其实与上面说过的单背景循环的原理相同。

不过由于不同的背景在远近层次上及实际视觉移动速度上不相同,因此在以贴图的

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

当前位置:首页 > 表格模板 > 合同协议

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

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