




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
泡泡堂地图编辑器研发目录摘要IIAbstractIII第一章 引言11.1 课题背景11.2 泡泡堂地图编辑器简介21.3 本课题的意义2第二章 开发环境以及相关技术介绍32.1 开发环境32.2 技术介绍32.2.1C+32.2.2Windows42.2.3Windows MFC62.2.4Windows GDI12第三章 需求分析163.1应用需求分析163.2 运行需求分析173.3 其他需求分析173.4 可行性分析173.4.1 社会可行性173.4.2 用户可行性173.4.3 经济可行性183.5 模块功能设计设计18第四章 系统设计194.1精灵位图渲染194 .2双缓冲技术224.3 地图的保存234.4 新建地图254.5 打开地图264.6 地图物体的增加与清除274.7 景层选择28第五章 系统测试305.1物体的添加305.2 物体的删除315.3 前景层315.4背景层325.5 全景层325.6 保存335.7新建地图335.8 打开地图34总结35参考文献36致谢37附录38 摘要2D休闲类游戏是整个游戏行业的重要组成,随着游戏行业的快速发展,3D游戏的泛滥与质量下降与2D休闲类游戏所花费的时间和精力形成鲜明的对比,2D休闲类游戏一直深受各个年龄阶层玩家的喜欢。网络游戏开发是一项很大的工程,需要很多综合性的知识。这对于刚刚入门的开发者来说很难理解。本论文从研究开发一个模仿泡泡堂地图编辑器的例子出发,讲述2D地图编辑器开发中用到的一些最基本的知识和设计思想,使大家清晰的理解游戏开发的过程。 整个设计中利用C+,Windows MFC,Windows GDI结合地图编辑的操作流程,对整个地图编辑器进行精心的设计和大量的测试,实现泡泡堂游戏的地图编辑功能,有上层地图了解泡泡堂地图是如何被开发出来,由于网络图片资源有限,本地图编辑器只能对小区地图进行编辑。关键词:2D游戏,泡泡堂地图编辑器,Windows MFC,Windows GDIAbstract 2 D games of leisure is the important component of the game industry, as the game rapid development of the industry, the spread of 3 D games with the decline in the quality and 2 D games of leisure spent time and energy form bright contrast, the leisure class 2 D game has been by each age class players like. Network game development is a very big project, need a lot of comprehensive knowledge. This to just entry-level developer is hard to understand. This paper from research and development a imitate PaoPaoTang map editor of the example set out, about 2 D map editor used in development some of the most basic knowledge and design ideas, make you clear understanding of the game development process. The whole design using c + +. Windows MFC, map editor with Windows GDI process, to the map editor for elaborate design and the number of test, realize PaoPaoTang game map editor functions, have the upper PaoPaoTang map is how to understand the map has been developed, because of network resources, pictures, local map editor can only the map editor.Keywords: 2 D game, PaoPaoTang map editor, Windows MFC, Windows GD键入文字键入文字键入文字第一章 引言 1.1 课题背景 随着社会的发展进步,游戏逐步成为一种重要的休闲娱乐和教育手段。这种被称为是第九艺术的电子游戏起源于西方,是基于电子技术发展起来的一种具有娱乐性质的产业。随着电子技术的不断发展和扩充,游戏产业的内容也不断得到丰富,目前的游戏产业已经成为包含计算机软硬件技术、网络技术以及无线技术等最新科技和各种文化艺术的新型娱乐产业。而其中,游戏引擎技术可谓重中之重,它是整个游戏产业的核心技术。目前中国的游戏产业正处在一个稳定上升的发展阶段,中国将成为全球最大的游戏市场,现在我们所看到的仅仅是冰山之一角。根据IDSA的统计结果,如图1-1可以看出喜爱游戏是人类的天性,不分年龄段1。图1-1:游戏用户年龄分布,性别分布,日常时间闲暇分配从游戏的市场规模来看,2000年中国的网络游戏销售额仅为0.38亿元,2001年即达3.25亿元,而2002年中国网络游戏市场规模达到10.2亿元,增长率为213.8%。根据IDC 2003年12月的最新研究,2003年中国网络游戏用户数量达到1380万,比2002年增长63.8%,占同年Internet用户数的20.2%,到2007年中国网络游戏用户数将达到4180万,从2002年到2007年这5年的年复合增长率将达到37.8%,届时网络游戏用户将占到Internet用户的29.5% 2。 1.2 泡泡堂地图编辑器简介在2004年全世界最火爆、在线人数最多的网络游戏,不是传奇、奇迹等深受欢迎的传统MMO,也不是梦幻西游、剑网、巨商等一大批后起之秀,而是盛大旗下的一款休闲游戏泡泡堂。泡泡堂地图编辑器按玩家喜欢的方式制作属于自己的地图,从而对泡泡堂这款游戏有个更深的认识。1.3 本课题的意义本课题以开发该游戏地图为平台,综合运用C+,Windows MFC,Windows GDI,,实现程序中算法的实现,消息的传递,循环等。通过这些技术的综合运用,更深入的了解计算机程序方面的相关知识,熟悉游戏地图编辑器开发的理念和流程,了解整个游戏地图编辑器项目开发的关注点。该课题属于研究性的一个课题,不考虑商业上的应用。只是对技术研究的并不是游戏本身的娱乐性。第二章 开发环境以及相关技术介绍 2.1 开发环境 操作系统:Microsoft Windows XP 开发语言:C+,Windows MFC,Windows GDI 2.2 技术介绍2.2.1C+C+是在C语言基础上为支持面向对象程序设计而研制的一个通用程序设计语言,它是在1980年由贝尔实验室的Bjarne Stroustrup博士创建的。C+语言开发的宗旨是使面向对象程序设计技术和数据抽象成为软件开发者的一种真正的实用技术。 C+适用的应用程序范围极广。C+可以用于几乎所有的应用程序,从字处理应用程序 到科学应用程序,从操作系统组件到计算机游戏等。 C+从C中继承了过程编程方式的高效性,并集成了面向对象编程方式的功能。 C+在其标准库中提供了大量的功能。 有许多商业C+库支持数量众多的操作系统环境和专门的应用程序。C+的变量都有这样的特点:占用内存空间,有地址,可以取得变量的地址,也可以根据地址访问这个符号代表的变量。在书写变量说明时,应注意以下3点:(1)允许在类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。而类型说明符与变量名之间至少用1个空格间隔。(2)最后一个变量名之后必须以“;”号结尾。(3)变量说明必须放在变量使用之前。2.2.2WindowsWindows是当今主流的操作系统,也是网络游戏主要的开发平台。不论是网络游戏客户端开发还是服务器端开发,都有很多成功的网络游戏作品运行于Windows操作系统上。Windows XP是Microsoft继Windows 2000和Windows Millennium之后推出的新一代Windows操作系统。Windows XP将Windows 2000的众多优点与Windows 98完美集成在一起。Windows操作系统的最大特色就是良好的用户交互性,这种交互性通过优秀的图形界面来实现。Windows操作系统将用户对应用程序窗口的所有操作(键盘按键、鼠标点击、窗口最大最小化等等)转化为Windows消息并分发给应用程序,应用程序对这些消息进行响应,从而实现用户对操作系统以及应用程序的控制。Windows程序设计是一种事件驱动方式的程序设计模式,主要是基于消息机制。Windows操作系统为每一个正在运行的应用程序维护一个消息队列。当应用程序有相关的事件发生时,操作系统将产生一条特定的标识事件发生的消息,随后消息被送入应用程序的消息队列。应用程序的消息循环将接受和处理这些消息,从而对相关事件做出响应。当用户完成对应用程序(窗口)的某种操作时会调用操作系统的某种支持,操作系统会将用户的操作包装成消息,并发送到一个应用程序可以访问的消息队列中,最后应用程序从消息队列中取走消息,并进行响应。消息为应用程序和应用程序间、应用程序和操作系统间提供了信息传递的渠道。在进行Windows程序设计时,要用到大量的系统API,而这些系统函数的调用参数和返回值中常常会用到很多系统自定义的数据类型。大部分的Windows数据类型都是来自C语言数据类型。数据定义的头文件为windef.h。typedef unsigned long DWORD;typedef int BOOL;typedef unsigned char BYTE;typedef unsigned short WORD;typedef float FLOAT;所有Windows自定义的数据类型都是全大写的。表示指针型的数据类型往往以P或LP作为前缀,而句柄型总是冠以H。句柄这种特殊的数据类型,可以理解为是指针,但又不能像指针那样直接通过地址去访问数据。Windows操作系统不是直接采用C+基本数据类型的原因:一方面是因为C+基本数据类型是由C+标准制定的,它的数据表示范围和解释有可 能在不同的软硬件平台上会有差异。另一方面是为了更简单直观的表示某些数据类型.消息循环机制:Windows操作系统为每一个正在运行的应用程序维护一个消息队列。当应用程序有相关的事件发生时,操作系统将产生一条特定的标识事件发生的消息,随后消息被送入应用程序的消息队列。应用程序的消息循环将接受和处理这些消息,从而对相关事件做出响应。Windows程序的关键代码,担负着获取、翻译、分发消息的任务消息循环从GetMessage函数开始,它从消息队列中取出一个消息。如果取得的消息是WM_QUIT消息,那么GetMessage函数将会返回FALSE,消息循环就会结束。如果取得的消息不是WM_QUIT消息,GetMessage函数将会返回TRUE,并将获得的消息传入TranslateMessage函数。TranslateMessage函数对消息进行必要的预处理后,消息将被送入DispatchMessage函数,DispatchMessage函数负责将消息传递给该窗口的消息处理函数进行处理。PeekMessage函数的基本功能和GetMessage函数相同,但PeekMessage函数不对WM_QUIT消息进行判断,当消息队列有可以取得的消息时取出消息并返回TRUE,没有可以取得的消息时,函数返回FALSE。如果希望当消息队列中有消息时,再调用PeekMessage获得消息,那么可以调用WaitMessage函数(函数在没有消息时等待,直到有消息才返回)配合PeekMessage完成消息循环在MFC中很多代码都是封装好了的。我们只需要进行添加API函数就行。典型的SDK程序结构如下:2.2.3Windows MFCWindows MFC通过对Windows API函数进行面向对象的封装以及提供常用Windows应用程序的开发规范,提高Windows程序的开发效率。使用MFC技术可以快速、高效地开发多种窗口形式的应用程序.Windows MFC将其中的各种类结合起来组成一个应用程序框架,该框架定义了应用程序的构架和部分实现,同时保留了用户接口。在实际的开发过程中,程序员所要做的就是将需要实现的功能代码填入MFC框架提供的用户接口中。在MFC程序设计中,将MFC应用程序根据程序构架的不同,分为单文档窗口程序、多文档窗口程序、对话框窗口程序以及多顶级文档窗口程序4类。Windows MFC通过对Windows API函数进行面向对象的封装以及提供常用Windows应用程序的开发规范,提高Windows程序的开发效率。使用MFC技术可以快速、高效地开发多种窗口形式的应用程序。在进行Windows程序设计时,要用到大量的系统API,而这些系统函数的调用参数和返回值中常常会用到很多系统自定义的数据类型。Windows MFC类库是C+类库,这些类封装了Win32应用程序编程接口、应用程序的概念、OLE特性、ODBC和DAO数据访问的功能等内容。封装大体分成如下4类:(1) 对Win32应用程序编程接口的封装类CWnd是MFC中常用的一个类,该类将Windows窗口和Windows有关的API函数封装到其成员函数内,CWnd类中的成员变量m_hWnd就是Windows API程序设计中的窗口句柄。(2) 对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口消息处理函数,注册Windows Class,创建窗口等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。MFC提出了以文档,视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。( 3)对COM/OLE特性的封装OLE建立在通用对象模型(COM)之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。(4) 对ODBC功能的封装以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API大量的复杂工作,提供了一种数据库编程模式。MFC几个重要的类:(1) 对话框类对话框类由CDialog派生,用于提供一个访问对话框的可编程界面。CDialog类中提供了大量与对话框编程密切相关的函数。CDialog类是从CWnd类派生出来的,它首先具有一个窗口类所具有的所有特征和功能,同时它又有自已的特色。从CDialog类派生的新类中,开发者需要实现和处理的对话框功能接口包括:1)对话框的创建和初始化。2)对话框数据交换(Dialog Data Exchange,DDE)与对话框数据检查(Dialog Data Validation,DDV)。3) 事件响应函数。按照运行机制来划分,对话框可分为模式对话框和无模式对话框两种类型。模式对话框。一旦模式对话框弹出,用户就必须在对话框中做出适当的操作,退出对话框,应用程序才能继续进行。无模式对话框。无模式对话框在弹出后一直出现在屏幕上,用户可以在应用程序中继续执行其他的操作或者启动其他的应用程序,当需要使用对话框时,只需要向激活一般窗口一样激活它就可以了。按照创建方式来划分,对话框可以分为自定义对话框、通用对话框、消息对话框3种类型。 自定义对话框是设计者按照应用程序的功能,分别设计对话模板和定义对话框类,然后在应用程序中使用。 在Windows中,很多程序都需要频繁的使用一些对话框来完成特定的功能。因此Windows系统直接提供了这类对话框,使得获取一个颜色,文字或字体变的非常简单。消息对话框是通过全局函数或者窗口类的成员函数创建并显示的,对话框中的内容在调用时由参数确定。 (2)控件类 控件是一些实现了特殊功能的子窗口,它们充当了窗口中的交互元素,每个控件都有特定的风格为用户提供反馈信息。MFC的控件都派生自CWnd类,所有的控件都可以看作是它们所在窗口的子窗口。CWnd类中实现了大多数窗口和控件常用的方法。程序调用的CWnd派生类的成员函数经常不是由派生类自身提供的,而是在类CWnd中定义的。CWnd类中还包含一些On开头的函数,这类函数用于处理窗口消息。几个重要的控件:(1) 按钮MFC中下压式按钮、单选按钮、复选框控件使用同一个CButton类。一个CButton对象可以是它们中的一种,这由它的按钮风格和成员函数Create的初始化决定。既可以从对话框模板中创建一个按钮控件,也可以直接在代码中创建。无论哪种情况,都要先调用CButton类的构造函数构造一个CButton对象,然后调用成员函数Create创建Windows按钮控件并应用到CButton对象上。(2) 标签CStatic类提供了一个Windows静态控件的性能。静态控件用来显示文本字符串、框、矩形、图标、光标、位图以及增强的图元文件,分别以7种形态存在。一个静态控件一般不接收输入,也不提供输出,但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父窗口有关单击的消息。(3) 编辑框 编辑控件是用来接受并显示用户输入的控件,MFC中封装编辑框的类为CEdit。编辑控件是一种子窗口矩形,可以通过对话框模板或直接从代码中创建一个编辑控件。 CEdit从CWnd继承了很多重要功能,还实现了很多多行文本编辑的功能。设置文本用SetWindowText,取得文本用GetWindowText,不管是多行文本还是单行文本,都可以用这种方法。 (4)列表框列表框控件通常用来列出一系列可供用户从中进行选择的项,这些项可以用字符串的形式给出,也可以采用图形等。可以设置允许用户在列表框中选择一个或多个控件。当选择了某项时,列表框向父窗口发送一条通知消息。MFC类CListBox封装了Windows标准列表框控件,其成员函数提供了对标准列表框的绝大多数操作。 (5)组合框 组合框(Combo Box)可以看作是一个编辑框或静态文本框与一个列表框的组合。 组合框有以下3种风格:(1)CBS_SIMPLE风格,列表框总是可见,组合框上半部分为编辑框。(2)CBS_DROPDOWN风格,当用户单击下拉箭头时列表框弹出,组合框上半部分为编辑框。(3)CBS_DROPDOWNLIST风格,当用户单击下拉箭头时列表框弹出,组合框上半部分为静态控件。 (3)CView类在MFC文档视图架构中,CView类是所有视图类的基类,它提供了用户自定义视图类的公共接口。在文档视图架构中,文档负责管理和维护数据,而视图类则负责以下3项工作: (1)从文档类中将文档中的数据取出后显示给用户。 (2)接受用户对文档中数据的编辑和修改。(3)将修改的结果反馈给文档类,由文档类将修改后的内容保存到磁盘文件中。CView是一个抽象类。这个函数必须被重载,通常执行如下操作:(1)以GetDocument()函数获得视图对应文档的指针。(2)读取对应文档中的数据。(3)显示这些数据。MFC体系框架在分工时把对显示器的显示输出和对打印机的显示输出全部都交给了视图类。CView派生类包括以下9种:(1)CScrollView:提供滚动支持,包括上下滚动和左右滚动。(2)CCtrlView:支持tree、list和rich edit控件,也就是说在这个视图中可以操作这些控件来进行特定格式的显示。(3)CDaoRecordView:在dialog-box控件中显示数据库记录。 (4)CEditView:提供了一个简单的多行文本编辑器。 (5)CFormView:包含dialog-box控件,可滚动,基于对话框模板资源。 (6)CListView:支持list控件。 (7)CRecordView:在dialog-box控件中显示数据库记录。 (8)CRichEditView:支持rich edit控件。 (9)CTreeView:支持tree控件。 (4) CDOcument类在使用CDocument存储数据时,程序必须把数据以一定的顺序保存到文件中,同样以这个顺序再读取出来。存储的数据就像是排列好的一样,这种特性称为数据的串行化。这种把对象内容存入一个文件或从一个文件中读取对象内容的过程称为序列化。在MFC中,要使从CObject派生的类具有串行化数据的功能,需要做如下工作:(1)定义该类时,在类说明中使用DECLARE_SERIAL(CLASSNMAE)宏。 (2)定义一个不带参数的构造函数(默认构造函数)。(3)在类的实现文件中使用IMPLEMENT_SERIAL(CLASSNAME,BASECLASS)宏。(4)覆盖Serialize成员函数(如果直接调用Serialize函数进行序列化读写,可以省略前面3步)。 (5) CFrameWnd类在MFC中,文档是真正的数据载体,视图是文档的显示界面,对应同一个文档,可能存在多个视图界面,同时需要另外一种事物来将这些界面管理起来,这种事物就是框架。MFC提供两种类型的框架窗口:单文档窗口SDI和多文档窗口MDI。单文档窗口一次只能打开一个文档框架窗口,而多文档窗口应用程序中可以打开多个文档框架窗口,即子窗口。2.2.4Windows GDIGDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。 GDI具有如下特点: 1. 不允许程序直接访问物理显示硬件,通过称为“设备环境”的抽象接口间接访问显示硬件; 2. 程序需要与显示硬件(显示器、打印机等) 进行通讯时,必须首先获得与特定窗口相关联的设备环境; 3. 用户无需关心具体的物理设备类型; 4. Windows参考设备环境的数据结构完成数据的输出。Windows GDI是计算机游戏实现的基础,在Windows平台下可以通过Windows系统提供的图形设备接口很好地进行窗口图形的渲染。图形设备接口(GDI)主要负责在显示屏幕和打印设备上输出图形,它是一组通用应用程序编程接口。GDI使得图形硬件和应用程序相互隔离。从而使开发人员编写设备无关的应用程序变得非常容易。GDI(Graphics Device Interface)图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI的出现使程序员无需关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,提高了开发工作的效率。GDI组件包括几百个API函数,这些函数根据功能大体可分成以下5类:1)取得和释放设备上下文的函数。2)取得有关设备内容信息的函数。3)绘图函数。4)设定和取得设备上下文参数的函数。5)调用GDI对象的函数。GDI可以操作的图形对象,也就是可以显示或打印出的图形,大体可分成以下4类:1)直线和曲线。2)填充区域。3)文字。4)位图设备上下文的基本用法:设备上下文的基本使用可以分成两种情况进行处理。(1) WM_PAINT消息下的处理 它涉及BeginPaint和EndPaint两个函数,这两个函数需要两个参数,一个是窗口句柄,一个是指向PAINTSTRUCT结构变量的指针。 应用程序窗口收到WM_PAINT消息有以下两种情况: (1)窗口最初创建时 (2)窗口出现无效区域时。 窗口会在以下4种情况时出现无效区域: (1)窗口移动后或大小改变后,窗口出现无效区域。 (2)窗口隐藏后重新显示或被其他窗口遮掩的部分重新可见,窗口出现无效区域。 (3)调用InvalidateRect、InvalidateRgn函数,窗口出现无效区域。 (4)调用ScrollWindow或ScrollDC函数滚动客户区,窗口出现无效区域。 虽然WM_PAINT消息可以用来重新绘制窗口,但是主动调用SendMessage函数或者PostMessage函数发送WM_PAINT消息并不一定能够完成窗口的重新绘制。 如果要重新绘制窗口,可以通过调用InvalidateRect或者InvalidateRgn函数实现WM_PAINT消息的发送. BOOL InvalidateRect(HWND hWnd,CONST RECT *lpRect, BOOL bErase); BOOL InvalidateRgn(HWND hWnd,HRGN hRgn,BOOL bErase); 当调用以上函数,窗口中将出现无效区域,当Windows检测到窗口中存在无效区域时将向消息队列发送WM_PAINT 消息。以下4种情况不产生WM_PAINT消息:(1)光标穿越客户区。 (2)图标拖过客户区。 (3)显示对话框。 (4) 显示菜单后释放。(2) 一般应用情况的处理除了WM_PAINT消息的处理之外,在其他时候也需要获得设备上下文句柄进行图形绘制。通过GetDC函数可以得到窗口客户区的设备上下文句柄,通过ReleaseDC函数可以释放对应的设备上下文句柄。 hdc = GetDC (hwnd) ; /进行具体的绘制操作 ReleaseDC (hwnd, hdc) ;获得设备上下文句柄进行图形绘制后,需要调用ValidateRect函数显示图形。ValidateRect (HWND hwnd, const LPRECT lpRect) ;与GetDC相似的函数是GetWindowDC,GetDC函数返回窗口客户区域的设备上下文句柄,而GetWindowDC函数返回写入整个窗口的设备上下文句柄。如果使用GetWindowDC函数,那么程序就可以通过GetWindowDC函数传回的设备上下文句柄在窗口客户区以外。例如,在窗口的标题栏上进行绘制。GDI几种常见工具:(1)画笔画笔对象用于绘制线条和轮廓,可以选择不同的颜色、粗细和线型。画笔句柄类型被定义为HPEN.Windows中定义了3种样式的预设画笔,可以调用GetStockObject函数来得到画笔句柄。HGDIOBJ GetStockObject(int fnObject)。fnObject参数可以使用下面3种中的一种:1)BLACK_PEN 黑色画笔。 2)NULL_PEN 中空的画笔。 3)WHITE_PEN 白色画笔。(2) 画刷GDI中使用画刷来填充某个窗口区域。通过画刷和图形绘制函数配合,可以在窗口中绘制各种颜色和样式的图形。 (3)字体 字体定义了特定的字样和大小,可以通过使用Windows的预设字体来实现不同字体文字的显示。 Windows支持两大类字体,GDI字体和设备字体。 GDI字体储存在硬盘的文件中,而设备字体是输出设备内建的。 GDI字体有3种样式:点阵字体、笔划字体和TrueType字体。 点阵字体的主要优点是显示性能(显示速度很快)和可读性.不过笔划字体性能不好,小字体的可读性很差,而大字体由于笔划是单根直线而显得很单薄。笔划字体适合绘图机,但是不适合其他场合。Windows可以通过改变定义轮廓的坐标对矢量字体进行缩放。 (4)裁剪区域 矩形在系统中是用RECT数据类型来描述的。 裁剪区域是对显示器上一个范围的描述,该范围是矩形、多边形和椭圆的组合。与画笔、画刷和位图一样,裁剪区域是GDI对象,应该调用DeleteObject来删除所建立的裁剪区域。当建立一个裁剪区域时,Windows传回该裁剪区域的句柄,类型为HRGN 裁剪区域的使用分为以下3个方面: 1)用现有的裁剪区域得到新的裁剪区域。 2)可以使用裁剪区域进行绘制。 3)可以用于裁剪。 GDI的坐标系: GDI默认的坐标系是以窗口客户区左上角为原点,X轴向右的方向为正方向,Y轴向下的方向为正方向的坐标系。其坐标系使用像素为基本单位,当窗口发生缩放时,坐标数据不会随着窗口的变化而变化。第三章 需求分析3.1应用需求分析系统的性能要求通常指系统需要的存储容量以及后援存储,重新启动和安全性,运行效率等方面的考虑。 硬件系统环境:C600、1G MB(RAM)、500MB(HD)。系统运行时对数据的保密性要求不高对一般的数据不要求进行加密。此外,对其它软件几乎没有依赖性,程序健壮性较好。3.2 运行需求分析硬件条件:酷睿 CPU、1G RAM、10G硬盘以上的PC机; 软件条件:Windows XP 。3.3 其他需求分析本系统有较好的可维护性、可靠性、可理解性、效率。易于用户理解和操作。可维护性包括了可读性、可测试性等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下,使上述各方面最大限度的得到满足。3.4 可行性分析3.4.1 社会可行性随着计算机的发展与普及,以及互联网技术的扩展,网络游戏正呈现高速发展,将来的用户群体将遍布至各个年龄层 。3.4.2 用户可行性本系统服务的对象是普通用户,使用人员主要是掌握计算机基本操作技能的知识分子。加之,当前类似的系统操作简单,使用者能够很快上手。因此,在系统的使用方面不会存在问题。3.4.3 经济可行性经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。由于本系统是作为毕业设计开发的,在经济上的投入甚微。 3.5 模块功能设计设计 新建地图保存地图MANAGE类读取地图管理MAP类Manage类在 消息循环 WmCreate时被创建类对象,主要实现功能新建地图,保存地图,读取地图,保存地图,管理MAP类功能。场景道具添加MAP类场景道具删除Spt类管理场景切换MAP类主要实现对地图的管理功能,对场景内道具的添加,删除,场景切换,对spt类管理。精灵位图渲染SpT类非精灵位图渲染 SPT类主要实现对位图的渲染工作。第四章 系统设计 4.1精灵位图渲染精灵是一个游戏术语,一般指2D游戏中用于表示角色或者其他物体的图形。精灵一般由多帧的动画组成,受玩家控制,并且能够和游戏场景发生交互。实现精灵时采用如下步骤:(1)载入背景位图,并选入当前DC。 源码实现:m_srcbitmap=(HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 精灵图 (2) 载入物体位图,并选入内存DC。 源码实现: SelectObject(m_srchdc,m_srcbitmap);BITMAP bitmapinfor;GetObject(m_srcbitmap,sizeof(bitmapinfor),&bitmapinfor);(3)生成一个遮罩DC,并设背景色,这个背景色就是人物图中的那个单一颜色。遮罩DC的作用:显示人物的地方是纯黑色,也就是全为“0”;外围的地方是白色,也就是全为“1”。在进行“与”操作时,黑色与任何颜色“与”最后的结果都是黑色。白色与任何颜色“与”都不改变原来的颜色。经过这样的操作后,有人物的地方都成了黑色,也就是全为“0”,而外围的地方都没有变。源码实现: m_maskbitmap=CreateBitmap(m_bwidth,m_bheight,1,1,NULL);SelectObject(m_maskhdc,m_maskbitmap);SetBkColor(m_srchdc,maskcolor); 遮罩DC(4)把物体图复制到遮罩DC,生成一个黑白色的图 源码实现: BitBlt(m_maskhdc,0,0,m_bwidth,m_bheight,m_srchdc,0,0,SRCCOPY); (5)将源DC中的图像通过“异或”的方法复制到内存DC,然后遮罩DC中的图像通过“与”的方法复制到内存DC,把源DC中的内容“异或”操作到内存DC。 人物图和背景图进行“异或”操作 源码实现:BitBlt(m_backhdc,x,y,m_swidth,m_sheight,m_srchdc,m_hframe*m_swidth,m_vframe*m_sheight,SRCINVERT); BitBlt(m_backhdc,x,y,m_swidth,m_sheight,m_maskhdc,m_hframe*m_swidth,m_vframe*m_sheight,SRCAND); BitBlt(m_backhdc,x,y,m_swidth,m_sheight,m_srchdc,m_hframe*m_swidth,m_vframe*m_sheight,SRCINVERT); 4 .2双缓冲技术目的:当游戏画面实时性要求较高时,则需要在短时间内快速更新画面,而运用传统单缓冲技术绘图则会出现画面闪烁、停顿等现象,严重影响游戏画面质量以及游戏开发的后期制作。游戏双缓冲技术为了解决帧率与刷新率不同步问题。双缓冲的原理可以这样形象的理解:计算机屏幕是一块画板,在内存环境中建立另一块画板,然后在内存中的画板上绘制复杂的图形,等图形全部绘制完毕后,再一次性的把内存中绘制好的图形“拷贝”到另一块画板(屏幕)上。(1)为了避免在目标设备上下文中直接绘制,首先建立一个和目标设备上下文关联的临时内存设备上下文,然后在创建的内存设备上下文中建立一个与目标设备上下文兼容的位图,位图的大小和目标设备上下文大小相同。源码实现:Manage类: m_mainhdc=GetDC(m_hWnd);/获取当前窗口主DC m_map=new Map(m_backhdc);Map类:Map:Map(HDC backhdc)m_realbackhdc=backhdcm_backbitmap=CreateCompatibleBitmap(m_realbackhdc,40*15,40*13);(2)绘制的时候首先在内存设备上下文的位图上绘制图形,当绘制完成以后,将内存上下文中绘制完成的位图复制到目标设备上下文中源码实现:TransparentBlt(m_realbackhdc,20,40,40*15,40*13,m_backhdc,0,0,40*15,40*13,RGB(0,0,0)TransparentBlt(m_realbackhdc,20,40,40*15,40*13,m_midhdc,0,0,40*15,40*13,RGB(0,0,0);TransparentBlt(m_realbackhdc,20,0,40*15,40*13,m_fronthdc,0,0,40*15,40*13,RGB(0,0,0);(3) 最后绘制完成以后删除内存设备上下文和位图。删除是为了防止该程序长期占有主DC,妨碍其他程序的绘制。源码实现:BitBlt(m_mainhdc,0,0,800,600,m_backhdc,0,0,SRCCOPY);/双缓冲实现ReleaseDC(m_hWnd,m_mainhdc);4.3 地图的保存 地图的保存是方便于玩家对地图编辑之后进行保存,然后用于泡泡堂游戏读取。地图的保存分为默认的直接保存还有另存。其中另存采用模式对话框。且只能保存为.mmd格式 源码实现: 保存功能:CPopMapEditView类: void CPopMapEditView:OnFileSave() / TODO: 在此添加命令处理程序代码 m_MyGame-SaveMap(m_filename.GetBuffer();Manage类: bool Manage:LoadMap( char const * const filename )FILE *fp=fopen(filename,rb);int row;int col;fread(&row,sizeof(int),1,fp);fread(&col,sizeof(int),1,fp);fread(m_map-GetBackMapData(),sizeof(MapKind)*row*col,1,fp);fread(m_map-GetMidMapData(),sizeof(MapKind)*row*col,1,fp);fread(m_map-GetFrontMapData(),sizeof(MapKind)*row*col,1,fp);fclose(fp);m_map-Apply();return true;另存功能: void CPopMapEditView:OnFileSaveAs()/ TODO: 在此添加命令处理程序代码static char szfilter=My Map Data Files(*.mmd)|*.mmd|;CFileDialog fdlg(false,mmd,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szfilter,this);if(fdlg.DoModal()=IDOK)m_filename=fdlg.GetPathNa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上半年四川师范大学考核招聘事业单位工作人员2人考前自测高频考点模拟试题及答案详解(全优)
- 2025年福建师范大学平潭附属中学招聘7人模拟试卷带答案详解
- 2025年芜湖安定精神病医院招聘护理10人模拟试卷及答案详解1套
- 2025年合肥市口腔医院引进高层次人才10人考前自测高频考点模拟试题及答案详解一套
- 2025年度郑州大学招聘工作人员(博士)500名模拟试卷及答案详解(名师系列)
- 2025年工业互联网平台SDN网络性能提升与资源利用率优化策略报告
- 2025年新能源与环保产业环保产业绿色环保产业与绿色环保产业政策报告
- 圣-桑 四分休止符 do` re`说课稿小学音乐人音版五线谱北京三年级上册-人音版(五线谱)(北京)
- 2025长江存储全球校园招聘笔试历年参考题库附带答案详解
- 2025江西吉安市吉水县园区开发建设有限公司及下属子公司招聘7人笔试参考题库附带答案详解
- 2025年建筑工程项目管理综合能力测评题库(附答案)
- 国务院便民服务管理办法
- 儿科哮喘护理个案
- 电力设备质量管理方案及保证措施
- 陪诊培训课件
- 2025至2030年中国工业控制软件行业市场运行态势及前景战略研判报告
- 2024年12月27日山西省临汾市纪委遴选面试真题及答案解析
- 2025年数智供应链案例集-商务部
- 艺术漆涂料施工合同协议
- 陈皮种植转让合同协议
- 脑出血的教育宣教
评论
0/150
提交评论