ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:521.51KB ,
资源ID:2944200      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2944200.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC++ 游戏编程背景动画设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC++ 游戏编程背景动画设计.docx

1、VC+ 游戏编程背景动画设计前面的内容介绍了前景动画的设计,接下来是背景动画的设计,背景动画的设计同样是利用连续贴图的原理。一、单一背景滚动(一):单一背景滚动就是利用一张相当大的背景图,当游戏进行的时候,随着动画中人物或鼠标的移动,背景显示区域跟着移动。例如地图显示。如上面这张图,由左上方到右下方,三个方框。代表显示在窗口中的背景区域,程序只要按照从左上到右下的顺序就可以连续显示3个方框区域,达到背景滚动的效果。其实这原理简单,这里就直接给出程序代码来看。范例:以键盘方向键()控制背景滚动显示:VS2008中新建Win32应用程序,命名后,选择默认的选项,点击完成。定义全局变量:1. HBI

2、TMAPmap;2. HDChmdc,mdc;3. HWNDhWnd;4. DWORDtPre,tNow;5. intx=0,y=0;HBITMAP map;HDC hmdc, mdc;HWND hWnd;DWORD tPre, tNow;int x = 0, y = 0;这里声明x,y来表示获取DC的屏幕原点:BitBlt(hdc,0, 0, 640, 480, mdc, x, y, SRCCOPY);消息处理函数WndProc()函数中1. caseWM_KEYDOWN:/响应各个方向键的操作2. switch(wParam)3. 4. caseVK_UP:5. y-=20;6. if(y

3、660)12. y=660;13. break;14. caseVK_LEFT:15. x-=20;16. if(x910)22. x=910;23. break;24. 25. break;case WM_KEYDOWN: / 响应各个方向键的操作 switch(wParam) case VK_UP: y -= 20; if (y 660) y = 660; break; case VK_LEFT: x -= 20; if (x 910) x = 910; break; break;运行后通过操作方向键可以控制查看地图的位置 (二)、循环背景动画循环背景动画师不断的进行背景图的裁切与接合,然

4、后显示在窗口上所产生的一种背景画面的循环滚动效果。下面来介绍这种动画效果的制作。如上图,在背景图向右移动时,屏幕会出现“缝隙”,所以我们就是要把移出屏幕的图贴到缝隙中来。这样子循环后,就可以看到在空中飞行的效果了。由上面的分析,我们的工作就是两次贴图。第一步,裁取原始背景图右边部分进行贴图操作到另一个DC中,假设目前裁取的右边部分的宽度为x,如图:第二步,采取原始背景图左边部分进行贴图操作到上一个DC中,完成了向右滚动接合后的新背景图。第三步,将接合后的背景图显示在窗口中,之后递增x值,进行循环操作。当x大于等于背景图后,就将x的值重设为0,继续重复循环。这样子就形成了背景循环效果。利用一张6

5、40*480的背景图,制作由左向右的循环滚动的动画程序代码:全局变量:1. HBITMAPbg;2. HDChmdc,mdc,buffdc;3. HWNDhWnd;4. DWORDtPre,tNow;5. intx=0,y=0;HBITMAP bg;HDC hmdc, mdc, buffdc;HWND hWnd;DWORD tPre, tNow;int x = 0;第五行,用 x y来记录被裁取的左上角点的坐标,初始值为( 0,0),表示第一次显示时是在最左上角。1. BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)2. 3. /HWNDhWnd

6、;4. HBITMAPbmp;/用于建立兼容位图5. 6. hInst=hInstance;/将实例句柄存储在全局变量中7. 8. hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,9. CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);10. 11. if(!hWnd)12. 13. returnFALSE;14. 15. 16. MoveWindow(hWnd,10,10,640,480,true);17. ShowWindow(hWnd,nCmdShow

7、);18. UpdateWindow(hWnd);19. 20. hmdc=GetDC(hWnd);21. mdc=CreateCompatibleDC(hmdc);22. buffdc=CreateCompatibleDC(hmdc);23. 24. /建立和窗口兼容的位图25. bmp=CreateCompatibleBitmap(hmdc,640,480);26. SelectObject(mdc,bmp);27. 28. bg=(HBITMAP)LoadImage(NULL,Lbg.bmp,IMAGE_BITMAP,640,480,LR_LOADFROMFILE);29. Select

8、Object(buffdc,bg);30. 31. MyPaint(hmdc);32. 33. returnTRUE;34. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)/ HWND hWnd; HBITMAP bmp; /用于建立兼容位图 hInst = hInstance; / 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, h

9、Instance, NULL); if (!hWnd) return FALSE; 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);

10、 bg = (HBITMAP)LoadImage(NULL, Lbg.bmp, IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE); SelectObject(buffdc, bg); MyPaint(hmdc); return TRUE;1. voidMyPaint(HDChdc)2. 3. /截取背景图右边的部分4. BitBlt(mdc,0,0,x,480,buffdc,640-x,0,SRCCOPY);5. /截取背景图左边部分进行贴图6. BitBlt(mdc,x,0,640-x,480,buffdc,0,0,SRCCOPY);7. /将结合后的背景图贴

11、到窗口8. BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);9. 10. tPre=GetTickCount();/获得持续时间11. x+=10;12. if(x=640)13. 14. x=0;15. 16. void MyPaint(HDC hdc) / 截取背景图右边的部分 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