二维游戏的编程技术.

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

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

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

资源描述

VC++游戏编程第二章二维游戏的编程技术第一节二维游戏的基本流程和架构1.二维游戏的基本功能:交互和输出交互部分:根据用户的操作,改变游戏的各种数据,以反映游戏的当前状态。输出:处理游戏运行中的各种数据,在输出设备上体现游戏的内容,包括游戏画面、游戏音效、游戏提示等。这两个部件的执行由调度模块指挥,简单的调度模块是一个do-while循环,串行执行:交互输出再输出再渲染…。当然也可以将两个部件分成不同的线程,并行执行。例如:如果要编写一个探险类的二维小游戏,一般需要实现这样的一个场景:代表玩家的小人在地图上移动,寻找各种物品。游戏采用简单的调度模块,即do-while循环来控制。渲染部分将游戏窗口分割为若干块,用地图填充。然后读取玩家的位置、方位、状态等信息,将角色画到地图上。交互部分检测玩家的输入,并据此更改相应的数据以便输出时使用。VC++游戏编程——游戏的编程技术2.实现二维游戏框架,需要做下面的几个工作:实现游戏地图的加载和编辑操作:为角色提供游戏环境图像的半透明技术:在显示地图和游戏角色需要精灵动画技术:为达到游戏角色的动态效果碰撞检测:用于检测游戏场景中的物体是否发生接触,使得游戏环境更加真实。VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术第二节VC++基本绘图技巧一、为什么使用VC++来设计游戏1.优异的运行速度:2.直接访问内存3.MFC(MicrosoftFoundationClassLibrary)数据库4.使用WindowsAPI二、与其他函数库的结合1.DirecXSDK(DirecXSoftwareDevelopmentKit)2.OpenGLAPI(OpenGraphicLibrary)VC++游戏编程——游戏的编程技术三、游戏舞台的坐标系统1.屏幕区、窗口、客户区屏幕区的大小视用户计算机所设置的分辨率而定,如:1024x768VC++游戏编程——游戏的编程技术2.坐标点与坐标转换以屏幕左上角为原点,屏幕上的任何位置都可以用一个坐标表示,我们称为屏幕坐标。当程序中调用某些以坐标点为实参的函数时,都要传递相应的屏幕坐标,如果我们只知道该点在客户区中的位置,则必须先将它转换为屏幕坐标。转换方法是调用ClientToScreen函数,反之调用ScreenToClientVC++游戏编程——游戏的编程技术四、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++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术建立新项目后,接着在HeaderFiles中新增一个名为stdafx.h的头文件,方法如下:VC++游戏编程——游戏的编程技术在项目中加入此文件后,就打开它并加以编辑。VC++游戏编程——游戏的编程技术在这个程序中,所要引用的头文件都是在stdafx.h中设定。下面建立这个项目所属的资源文件VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术VC++游戏编程——游戏的编程技术最后,还要为这个新项目设定使用的MFC函数库,方法如下VC++游戏编程——游戏的编程技术完成了设置MFC之后,就可以建立应用程序窗口了VC++游戏编程——游戏的编程技术应用程序与窗口下面我们建立一个信息窗口来展示程序功能VC++游戏编程——游戏的编程技术这样,VC++便会自动为这个项目建立一个gameFrame类。VC++游戏编程——游戏的编程技术这样,VC++便会自动为这个项目建立一个gameFrame类。双击gameFrame.h,即可看到它的内容VC++游戏编程——游戏的编程技术下面我们再建一个Class类,并将其命名为gameAppVC++游戏编程——游戏的编程技术gameAppClass建立完后,现在gameApp.h中声明MFC的初始函数,内容如下:VC++游戏编程——游戏的编程技术然后在gameApp.cpp中建立函数的实体:VC++游戏编程——游戏的编程技术最后建立一个基本的Windows窗口,所以在gameFrame.cpp中加入如下程序代码:VC++游戏编程——游戏的编程技术运行结果:VC++游戏编程——游戏的编程技术实际上,在建立窗口之前,可以在gameFrame.cpp中加入许多窗口控制命令,程序代码如下:gameFrame::gameFrame(){RECTrect;Create(NULL,绘图窗口);//建立窗口CClientDCdc(this);//将DC中的数据映射到窗口的工作区intwidth=dc.GetDeviceCaps(HORZRES);//返回屏幕区的宽度intheight=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);//建立响应WM_PAINT消息的dcoldFont=dc.SelectObject(&newFont);//选择新字体dc.SetTextColor(RGB(0,0,255));//设定文字显示的颜色dc.TextOut(30,60,绘制文字);//输出文字至DCdc.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++游戏编程——游戏的编程技术例:线段绘制、绘制填充的区域第三节地图的创建与显示一、图像的加载和显示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运算NOT

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

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

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

×
保存成功