第二章 二维游戏的编程技术

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VC++游戏编程第二章二维游戏的编程技术第一节二维游戏的基本流程和架构1.二维游戏的基本功能:交互和输出交互部分:根据用户的操作,改变游戏的各种数据,以反映游戏的当前状态。输出:处理游戏运行中的各种数据,在输出设备上体现游戏的内容,包括游戏画面、游戏音效、游戏提示等。这两个部件的执行由调度模块指挥,简单的调度模块是一个do-while循环,串行执行:交互输出再输出再渲染…。当然也可以将两个部件分成不同的线程,并行执行。VC++游戏编程——游戏的编程技术2.实现二维游戏框架,需要做下面的几个工作:实现游戏地图的加载和编辑操作图像的半透明技术精灵动画技术:采用连续帖图方式产生动画效果碰撞检测VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术第二节VC++基本绘图技巧一、为什么使用VC++来设计游戏1.优异的运行速度:2.直接访问内存(VB间接访问)----双刃剑3.(VC++)+MFC数据库架构4.(VC++)+WindowsAPI架构二、与其他函数库的结合1.DirecXSDK2.OpenGLVC++游戏编程——游戏的编程技术三、游戏舞台的坐标系统1.屏幕区、窗口、客户区屏幕区的大小视用户计算机所设置的分辨率而定,如:1024x768VC++游戏编程——游戏的编程技术2.坐标点与坐标转换以屏幕左上角为原点,屏幕上的任何位置都可以用一个坐标表示,我们称为屏幕坐标。当程序中调用某些以坐标点为实参的函数时,都要传递相应的屏幕坐标,如果我们只知道该点在客户区中的位置,则必须先将它转换为屏幕坐标。转换方法是调用ClientToScreen函数,反之调用ScreebToClientVC++游戏编程——游戏的编程技术四、MFC(MicrosoftFoundationClass)绘图类1.MFC的GDI类GDI(GraphicDeviceInterface)意为“图形设备接口”。Windows的架构不允许使用者直接存取VGA显卡上的内存,所以在MFC中提供了图形设备接口类,用来让使用者显示数据。上图表示GDI类都是从CGdiObject继承而来,这些类必须在配合设备上下文(DC,DeviceContext)来使用。这些GDI类的用途如下:VC++游戏编程——游戏的编程技术CBimap:该类封装了一个GDI位图,提供一个操作位图的接口CBrush:该类封装了一个GDI画刷,可被选择为设备描述表的当前画刷,画笔为图形中填满样式CFont:该类封装了一种GDI字体,可被选择为设备描述表的当前字体Cpalette:该类封装了一个GDI调色板,可作应用程序和一色彩输出设备如显示器之间的接口CPen:该类封装了一种GDI画笔,可被选择为设备描述的当前画笔,画笔为图形外框样式CRgn:该类封装了一GDI域,用于操作窗口内的椭圆域或多边形域。该类一般与CDC类的裁剪成员一起使用VC++游戏编程——游戏的编程技术2.MFC的CDC类DC(DeviceContext,设备上下文)可以将其想象成一个图形绘制的区域。当要在屏幕上绘图时,应用程序就必须先取得“屏幕的DC”才可以进行绘图;当使用者要操作其窗口绘图时,就必须先取得“操作窗口的DC”,然后再把要绘制的图形放到各个DC中,这时在该DC所代表的区域中,就会显示所绘制的图形。VC++游戏编程——游戏的编程技术MFC把各种不同的DC类包装在CDC类中,并提供了许多与绘图有关的函数。VC++游戏编程——游戏的编程技术CClientDC:代表操作窗口的DC,可用于在快速响应鼠标事件时进行绘画CMetaFileDC:Windows元文件的设备环境类,Windows元文件包含一个图形设备接口(GDI)命令序列,该序列可被重新执行而创建一幅图像CPaintDC:响应MN_PAINT消息的DC,是显示设备环境类,用于窗口中的OnPaint成员和视图OnDraw成员函数中,自动调用BeginPaint进行构造,调用EndPaint进行析构。CWindowsDC:代表整个屏幕的DC,即整个窗口的显示设备环境类,包括客户区和框架区。VC++游戏编程——游戏的编程技术五、构建游戏窗口1.设置VC++应用程序中的头文件VC++游戏编程——游戏的编程技术这样就不用担心VC++会出现编译程序找不到DirectX的.h和.lib的头文件错误VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术2.建立程序项目使用VC++中的File|New命令建立新项目并按下面步骤操作:可以使用VC++的MFC架构开发应用程序,它可以帮助你套入许多默认的窗口、对话框、菜单等基本组件,这些组件在设计游戏时基本用不上,因此只要建立一个单纯的Win32应用程序项目即可。VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术建立新项目后,接着在HeaderFiles中新增一个名为stdafx.h的头文件,方法如下:VC++游戏编程——游戏的编程技术在项目中加入此文件后,就打开它并加以编辑。在这个程序中,所要引用的头文件都是在stdafx.h中设定。VC++游戏编程——游戏的编程技术下面建立这个项目所属的资源文件VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术最后,还要为这个新项目设定使用的MFC函数库,方法如下VC++游戏编程——游戏的编程技术完成了设置MFC之后,就可以建立应用程序窗口了VC++游戏编程——游戏的编程技术应用程序与窗口下面我们建立一个信息窗口来展示程序的功能,即建立一个应用程序对象以及窗口对象。VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术这样,VC++便会自动为这个项目建立一个gameFrame类。双击gameFrame.h,即可看到它的内容。VC++游戏编程——游戏的编程技术下面我们再建一个Class类,并将其命名为gameAppVC++游戏编程——游戏的编程技术gameAppClass建立完后,先在gameApp.h中声明MFC的初始函数,内容如下:VC++游戏编程——游戏的编程技术然后在gameApp.cpp中建立函数的实体:VC++游戏编程——游戏的编程技术最后建立一个基本的Windows窗口,在gameFrame.cpp中加入如下程序代码:这段程序建立了一个名称为“绘图窗口”的窗口,MFC的Create()函数会帮你完成所有建立窗口时遇到的函数调用动作。VC++游戏编程——游戏的编程技术运行结果:VC++游戏编程——游戏的编程技术在gameFrame.cpp中可以加入窗口控制命令,程序代码如下:width=dc.GetDeviceCaps(HORZRES);height=dc.GetDeviceCaps(VERTRES);GetWindowRect(&rect);width=(width-(rect.right-rect.left))/2;height=(height-(rect.bottom-rect.top))/2;MoveWindow(width,height,(rect.right-rect.left),(rect.bottom-rect.top),true);这样可以将窗口放置在屏幕的正中。VC++游戏编程——游戏的编程技术六、MFC绘图类---从项目建立绘图成员函数执行VC++中的View|ClassWizard,打开MFCClassWizard对话框VC++游戏编程——游戏的编程技术这时在项目的程序代码中多出了一个有关窗口绘图的OnPaint()函数VC++游戏编程——游戏的编程技术这样可以在OnPaint()函数中编写程序代码voidgameFrame::OnPaint(){CPaintDCdc(this);oldFont=dc.SelectObject(&newFont);dc.SetTextColor(RGB(0,0,255));dc.TextOut(30,60,绘制文字);dc.SelectObject(oldFont);}在gameFrame::gameFrame()之前声明新字体对象与旧字体指针:CFontnewFont,*oldFont;在gameFrame()中建立Cfont类对象newFontnewFont.CreateFont(100,50,50,0,100,TRUE,TRUE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,楷体);VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术例:线段绘制、绘制填充的区域(画刷实例祥见C++绘图介绍-new.ppt),第三节地图的创建与显示一、图像的加载和显示1.图形文件格式:BMP、GIF、JPEG、TIF。其中BMP是Windows平台的标准图像格式。BMP图像,又名位图图像(bitmap),这种格式像一张地图一样,记录目标图像上每个像素点的颜色值。2.加载位图文件:步骤一:将位图加载到内存DC中步骤二:将内存DC中的内容绘制到要显示位图的DC中。见位图程序。VC++游戏编程——游戏的编程技术3.两个函数:(1)加载位图LoadImage()HANDLELoadImage(HINSTANCEhinst,//包含位图实体的handleLPCTSTRlpszName,//位图来源UINTuType;//加载位图的类型intcxDesired,//位图的宽度intcyDesired,//位图的高度UINTfuLoad//加载位图的方式);当位图加载到内存DC后,只要把内存DC中的内容贴到显示位图的DC中即可。只要利用CDC::BitBlt函数皆可以完成这个操作。VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术(2)绘制位图BitBlt()BOOLBitBlt{intx,//贴到目的地左上角点的x坐标inty,//贴到目的地左上角点的y坐标intnWidth,//贴到目的地的宽度intnHeight,//贴到目的地的高度CDC*pSrcDC,//存储来源位图的DCintxSrc,//源位图左上角点的x坐标intySrc,//源位图左上角点的y坐标DWORDdwRop//Raster运算值};VC++游戏编程——游戏的编程技术例如语句:dc-BitBlt(0,0,500,400,mdc,200,100,raster)这里可以假设dc是代表操作窗口的DC,mdc是存储位图来源的内存DCVC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术Raster值:BLACKNESS:将位图转换为黑色DSTINVERT:将目的DC做NOT运算MERGECOPY:将选择的画刷与位图做AND运算MERGEPAINT:先将位图做NOT运算,再与目的DC做OR运算NOTSRCCOPY:将位图做NOT运算NOTSRCERASE:先将位图与目的DC做OR运算,再将其做NOT运算PATCOPY:将选择的画刷贴到目的DCPATINVERT:将目的DC与选择的画刷做XOR运算PATPAINT:先将位图做NOT运算,再与画刷做OR运算,最后再与目的DC做OR运算SRCAND:先将位图与目的DC做AND运算SRCCOPY:将位图贴到目的DCSRCERASE:先将目的DC做NOT运算,再位图做AND运算SRCINVERT:将位图与目的DC做XOR运算SRCPAINT:将位图与目的DC做OR运算WHITENESS:将位图转换为白色VC++游戏编程——游戏的编程技术二、地图的绘制1.固定地图VC++游戏编程——游戏

1 / 140
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功