版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 本科毕业设计(论文)题目名称: 基于DirectX的太空飞行射击游戏的设计与实现 学 院: 计算机科学技术学院 专业年级: 计算机科学与技术(工)12级 学生姓名: 杨睿智 班级学号: 计12-1班 33号 指导教师: 张凤君 二一六 年 六 月 十四 日摘要飞行射击游戏是一类风靡全球的益智小游戏,多次被移植到PC端和移动端,曾几何时,它创造了一个无法企及的游戏巅峰,也曾影响力一代产业链。如今,虽然它已经不复当年的辉煌,但作为一个时代的经典,它永远不会消失在历史的长河中,在现在的智能机时代,它依旧散发着无穷的生命力。出现了雷霆战机全民飞机大战等优秀的飞行射击类游戏。本课题是基于DirectX
2、的飞行射击游戏,它是运行于Windows操作系统的一款2D游戏,以C+为开发语言,在Visual Studio 2008环境下使用DirectX软件开发包来开发的一款多媒体游戏。通过调用DirectX API的显示部分、输入部分来开发太空飞行射击游戏,从而加强游戏的图像和声音效果,使看似简单的太空飞行射击游戏画面更具真实性和空间感。在该游戏中的显示部分主要完成了游戏场景的载入和渲染;在交互部分完成了由键盘对游戏角色的操控,并通过显示器进行图形输出反馈;在游戏逻辑方面,对游戏的开始和结束的条件做出判断,完成碰撞检测、角色升级、伤害计算、以及enemy AI等。本游戏通过调用DirectX API
3、实现以上功能,基本实现了简单的2D游戏引擎功能.关键词:2D游戏;DirectX;场景渲染:碰撞检测 Abstract Flight shooting game is a kind of puzzle game popular around the world, has been ported to the PC and mobile sides, long ago, it created a game can not match the peak, also influence the generation chain. Now, although it has no longer its
4、former glory, but as a classic era, it will never disappear in the course of history, in the present era of intelligent machines, it still exudes boundless vitality. A "Thunder fighter" "Full name airplane Wars" and other excellent flight shooting game.This paper is based on Dire
5、ctX flight shooting game, which is running on the Windows operating system a 2D game in C + as a development language, using the DirectX Software Development Kit to develop a multimedia game in Visual Studio 2008 environment. DirectX API by calling the display section, an input section to develop sp
6、ace flight shooting game, thereby strengthening the game's graphics and effects, so seemingly simple space flight shooting game screen more authenticity and sense of space. In this game, the main part of the display to and rendering game scenes; interactive section completed by the keyboard to c
7、ontrol the game characters, and through the display graphics output feedback; in terms of game logic , conditions for the start and end of the game to make judgments, complete collision detection, character upgrades, damage calculation, and the enemy AI and so on. This game by calling the DirectX AP
8、I to achieve the above functions, the basic realization of a simple 2D game engine.Key Words:2D game;DirectX;Scene rendering;Collision testI目 录第1章 概述11.1 飞行射击游戏的开发背景11.2 2D太空飞行射击小游戏开发的目的和意义11.3 飞行射击游戏的发展及研究现状21.4 系统描述5 1.4.1 开发环境及技术介绍5 1.4.2 飞行射击游戏开发设想6第2章 方案论证72.1 可行性研究7 2.1.1 技术可行性7 2.1.2 经济可行性7 2
9、.1.3 操作可行性7 2.1.4 法律可行性72.2 方案论证82.3 方案总结8第3章 需求分析93.1 功能行为需求描述9 3.1.1 太空飞行射击游戏用例建模9 3.1.2 活动图扩展15 3.1.3 功能模块划分173.2 性能需求183.3 运行需求183.4 设计约束18 3.4.1 硬件约束18 3.4.2 可移植性19第4章 概要设计204.1 系统总体设计20 4.1.1 游戏引擎结构设计20 4.1.2 逻辑结构设计214.2 功能模块设计22 4.2.1 系统模块架构22 4.2.2 系统体系结构建模224.3 关键算法23 4.3.1 碰撞检测算法234.4 本章小结
10、26第5章 详细设计275.1 游戏类的实现27 5.1.1 DX27 5.1.2 管理27 5.1.3 场景275.2 子系统描述27 5.2.1 DX模块28 5.2.2 碰撞检测模块30 5.2.3 粒子系统模块315.3 本章小结32第6章 软件测试及结果分析336.1 性能测试336.2 逻辑测试346.3 功能测试346.4 本章小结35结 论36致 谢37参考文献38附录39I第1章 概述1.1 飞行射击游戏的开发背景当今这个娱乐的年代,电脑游戏已经成为我们生活中补课或缺的一部分了,从最小的手机上的贪吃蛇小游戏,一直到到魔兽世界等经典网络游戏,他们都给我们的生活带来了乐趣,让我们
11、能在忙碌的日常生活当中得到充分的放松。尤其是各种小游戏,以其简单方便的操作,和变化多样的性能更是广受年轻人的喜爱。2015年全球网络游戏市场规模将达到884亿美元,同比增长9%。过去五年全球网游基本稳定在8%左右。相比于发展时间长,商业模式较为成熟的欧美市场,新兴游戏市场发展速度更快,2015年中国游戏收入有望超越美国排名全球第一。作为发展最为快递的新兴游戏市场之一,2015年中国网游市场规模达到1361.8亿元,同比增长24.41%,预期2016-2018年将逐渐趋于稳定。细分市场看,2015年端游仍然占据最主要地位,市场规模占比42.77%,移动游戏则增长速度最快,2016年有望赶超端游成
12、为占比最高的细分市场。1.2 2D太空飞行射击小游戏开发的目的和意义 目前游戏产业已经成为中国如日中天的产业之一。中国的游戏产业经过二十余年的发展,正处在一个高速增长的时期,已经成为国际公认最具发展潜力的市场。在我国游戏市场的起步阶段,我国游戏的自主研发能力较弱,市场主要以其他国家和地区的游戏为主。如今,随着国家政策的大力扶持,我国游戏运营商改变了以代理外国游戏为主的运营方式,转而开发自主产权的游戏。虽然我国自主开发能力提升很快,但在技术上仍然落后与欧美日韩等游戏行业成熟的国家休闲益智是开发单机小游戏的本源。同时,中国缺乏高质量的游戏开发者,特别是游戏设计者,这是中国游戏行业面临的一大问题。如
13、果这一情况得不到改观,我国游戏开发技术很难赶上其他游戏行业成熟的国家。相对于大型游戏,小游戏之所以能够生存下来是因为其有大型游戏没有的优势,小游戏体积小,玩法比较简单,对计算机等游戏平台性能要求比较低。对于朝九晚五的大多数人来说,很难拿出一整块时间玩游戏,他们需要一种时间灵活、轻松便捷的小游戏去放松心情,小游戏正符合他们的需求。针对以上契机和个人兴趣,我决定开发一款2D飞行射击小游戏。虽然只是模仿但也是成为一名游戏开发者的必经之路。本课题是一个基于2D纵向的飞行射击游戏。1.3 飞行射击游戏的发展及研究现状在所有的游戏类型中,飞行射击游戏,即STG,可以说是最古老,也是最深入人心的一种虚拟游戏
14、,同时也一直拥有着广大的粉丝群体,从红白机到PC再到手机,我们对飞行射击游戏的喜爱一直没有停止。在飞行射击游戏中,我们往往操作着一架普普通通的飞机,在漫天密集的枪林弹雨中惊险地消灭敌人,充当世界的救世主;或者以宇宙为背景,驾驶着高科技战机在太空中探险飞天自古以来就是人类的一大梦想,于是在虚拟游戏世界中这种元素就很自然的受到全世界玩家经久不衰的追捧。STG的发展同样有一个漫长的历程,这其中最让人印象深刻的恐怕还是街机时代的飞机游戏带给我们同年的快乐。作为80、90后的我们,一定不会忘记“小蜜蜂”、“沙罗曼蛇”、“打击者1945”、“雷电”这些耳熟能详的名字。电子游戏是我们这一代人童年最美好的回忆
15、,一个硬币,一盘卡带,曾开启了多少小伙伴们“打飞机”的快乐生涯。即使那个时代的我们还根本不知道什么是STG。STG(Shooting Game),飞行射击游戏,起源于上个世纪70年代的日本,而伴随着电影星球大战席卷全球的狂热风暴,电子游戏的开山鼻祖Space Invaders(太空侵袭者)应运而生,这也就是我们最初知晓的那款著名的“小蜜蜂”。现在看来单调的画面和简单的操作,却让那个时代的人们第一次体会到瞄准、射击和躲避子弹的乐趣,电子游戏也正是在这一次获得了前无古人的成功,而“打飞机”则成为了全世界街谈巷玩的游戏。 图1-1 太空侵袭者从80年代末到90年代初,STG如雨后春笋般涌现,一片百家
16、争鸣的景象。那也是STG代表电子游戏的时代,创新繁花似锦,几乎每款游戏都采用了新的技术,鲜艳的色彩、卷轴式的大场景、逐渐华丽的爆炸特效等等,都让STG的游戏品质得到极大的提升。众多作品中,沙罗曼蛇绝对称得上经典之作。沙罗曼蛇是那个年代位数不多的横版游戏,也是很多经历过那个年代的玩家深刻的游戏记忆。精细的关卡布局,击杀敌人后获得可增强火力的能量胶囊,脑洞大开的BOSS设计,一系列的创新都让人们体验到了从未有过的兴奋和过瘾。很长一段时间,一提起飞行和射击,很多人脑海中最先浮现的就是沙罗曼蛇。图1-2 沙曼巴蛇图1-3 沙曼巴蛇到了90年代初,随着电子技术的进步,飞行射击游戏在感官上也有了进一步的优
17、化,图像和音乐音效也都更加出色。街机版迎来最后的革新,而家用游戏机也从FC红白机跨越到PCE的时代。旧式STG从此达到顶峰,并且开始孕育新的蜕变。彩京系列打击者1945的出现,实在给人耳目一新的感觉,精美的画面在那个时代,足够给人绝对的震撼,游戏中的坦克、飞机以及能变成人形的BOSS都让人眼前一亮。凭借着多样的战机选择和武器设定,特别是行云流水的操作感和高难度的躲避技巧,打击者1945很快成为了风靡全球的街机游戏。图1-4 打击者1945同样,当时与彩京一起瓜分STG市场的还有雷电系列。这款纵向卷轴的空战射击游戏拥有更多的飞机选择,同时在游戏过程中你也会感觉更加爽快。图1-5 雷电90年代中后
18、期,随着电子技术的飞速发展和互联网的初步应用,越来越多的其他类型游戏开始登上历史舞台,而STG的发展却似乎陷入瓶颈。创新乏力,玩法单一,弹幕系的高难度让很多普通玩家望而却步,玩家的大量流失让STG逐渐变成了只有发烧友才会去玩的游戏。随着“打着飞机”长大的一群玩家渐渐长大成人,STG也继续走向衰落,但恰恰是在这一时期,却涌现出一批经典STG力作。怒首领蜂虫姬等,从弹幕、难度、关卡设计、剧情、画面等方面都做了革新,成为倍受STG玩家推崇的作品。也许STG再也不会回到巅峰,但是经典之所以称之为经典,就是他们总会在不经意间从我们的脑海中轻轻闪过,并且不会被忘记。在手机游戏越发火热的今天,我们惊喜的发现
19、,飞行射击游戏似乎最适合在手机上把玩,手指在竖屏上滑动,任何时候,在指间就能完成所有操作。1.4 系统描述1.4.1 开发环境及技术介绍1.太空飞行射击游戏开发环境介绍操作系统(OS):Microsoft Windows 7;开发语言:C+;开发环境:Microsoft Visual Studio 2008;使用库:DirectX9.0c2.DirectX简介DirectX(Direct eXtension,简称DX)是由微软公司创建的使用C+语言按照COM的多媒体编程接口1。很多游戏的游戏开发如Microsoft Windows、Microsoft XBOX、Microsoft XBOX 3
20、60和Microsoft XBOX ON等都是用其开发的。并且他还能够向程序人员提供一个统一的硬件驱动的标准,使游戏的开发环节不用为了每一个品牌的硬件去编写不同的驱动,同时也是用户的使用变得极其方便。DirectX之中包含了很多应用程序编程接口,按照它们的性质不同进行分类,可以分为四网络、声音、输入和显示四部分14。(1)显示部分这是DirectX里对于图形的处理的重要组成部分,是由DirectDraw与Direct3D两个小部分组成的2。Direct3D的功能是3D效果的显示,比如经典网游半条命中的场景和人物、魔兽争霸3中的地图各种单位等,都是使用了DirectX的Direct3D。Dire
21、ctDraw则主要承担了2D图像加速。它的功能范围很广泛,比如我们日常中播放mpg、浏览一些图片或者玩一些小游戏的时候都是用了DDraw的支持。(2)声音部分DirectSound是这个部分中的API的最重要的地方,它的主要功能是用来播放声音,而且还有处理混音的功能,同时还会对3d音乐效果有加强的作用,并且还具有录音的功能13。我们游戏里的声音之所以可以对我们使用电脑的各种各样的声卡进行兼容有事因为DirectSound存在的原因。(3)输入部分我们需要鼠标键盘等设备来进行游戏,而对于这些设备的功能进行兼容,并且是他们能够达到工作的最佳状态,DirectInput功不可没15。而且不但是鼠标键
22、盘,它还支持连接手柄、摇杆、模拟器等。 (4)网络部分网络游戏是现在游戏的中流砥柱,提到网络功能就不得不说DirectPlay,它为网游提供了TCP/IP,IPX,Modem和串口等多种连接方式,让玩家们可以选择不用的联网方式来进行游戏,此外它还支持网络的通话功能跟加密措施3。3.C+语言特点C+是一种从C语言的基础上派生出的具有面向对象特性的高级编程语言 具体来说C+语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的
23、一个质的飞跃,C+完美地体现了面向对象的各种特性。1.4.2 飞行射击游戏开发设想本游戏开发的环境是Visual Studio 2008,本游戏开发使用的是C+语言,因此我在开发2D太空飞行射击小游戏的时候采用面向对象的开发方法。初步设想构建5个部分,分别包括player部分、enemybullet部分、bullet部分、DxTest部分、ship部分。将各部分的功能方法封装在8类中,并根据各部分之间的关系选择各类中要调用的共有方法和变量,以便建立各部分之间的联系。第2章 方案论证2.1 可行性研究可行性研究的目的简单来说就是用最廉价的成本和最效率的速度来确定系统,并且是确定可以进行的。可行性
24、分析的目的不是解决问题,而是确定问题是否值得去解决,从以下四个方面考虑可行性:2.1.1 技术可行性 本次开发的太空飞行射击游戏想达到2D游戏效果可以采用两种图像接口,一种是OpenGL,OpenGL生成二维、三维图像均可,用简单的图形图像比特绘制复杂的三维景象是其三维图像生成的原理。OpenGL是一种可以在不同的平台之间进行相互移植的接口,它与硬件无关。另一种接口便是DirectX,遵循COM,是由微软公司创建的多媒体编程接口,所以它会在微软所开发的平台上功能会得到更多的展现,尤其是在2D开发方面9。与OpenGL相比,DirectX功能更加完善。2.1.2 经济可行性 经济可行性是指对组织
25、的经济状况和投资能力进行分析,对系统建设,运行和维护费用进行估算,对系统建成后可能取得的社会及经济效益进行评估。 本游戏的开发有本人利用毕业设计的机会开发,开发费用可以忽略不计。 本游戏的开发需要资金少。由于基本引擎已经开发设计好,游戏开发运行后,可以轻松的进行各项信息的发布与管理,节省了人力,物力和财力,减少无意的错误,节省了大量的时间,更新效率也大幅度提高。本游戏小,且娱乐性高,具有一定市场占有率,因此,在经济上是可行的。所带来的效益远远大于游戏的开发成本。2.1.3 操作可行性本次课题是制作2D游戏,而且以雷电游戏作为借鉴。继承了传统飞行射击类游戏的操作方法,通过键盘来操纵飞机,操作简单
26、,容易上手。2.1.4 法律可行性在本次开发过程中,若开发的游戏进行发行,进行商业活动,则所选择的开发环境的需要购买正版的商业版本,以免侵犯他人的知识产权。若本次开发仅供学习研究,则可以使用厂家提供的免费使用版本。在本次开发中,不得存在损害他人利益,损害集体或国家利益的行为。2.2 方案论证根据设计游戏的初始需求可以提出两种开发方案:以C+为开发语言,图形库采用OpenGL,编译环境使用Microsoft Visual studio 2012。开发语言采用C+,多媒体编程接口采用DX,编译环境使用Microsoft Visual studio 2008。由于本人的学习,已基本掌握对Visual
27、 Visual studio 2008编辑器的使用,同时也对Windows API进行了学习,对使用C+进行编程相对来说比较擅长,而且由于在游戏开发中需要编写脚本,同时C+语言在脚本编写方面更有优势。另外比起OpenGL,我们上文提到的DirectX是由微软开发的,所以它与Windows平台契合度更高,功能更完善。本次开发选择制作类似雷电的小游戏,因游戏规模相对不大,对人力、物力、财力的要求是我可以达到的;另外,我开发游戏使用的编辑器Visual C+6.0使用的是免费版本,使用的DirectX SDK也是免费的版本,虽然免费版本功能有些不健全,但对于我开发的小游戏来说已经足够了。以上叙述表明
28、我开发飞行射击小游戏在经济上是可行的。在操作可行性上,在保证对游戏的质量要求前提下,本游戏以直观易懂,使用方便为目的开发了以下游戏操作:玩家通过键盘上下左右键控制飞机飞行,space键设计,以上操作使玩家可以直接上手操作本游戏,因此本游戏在操作上是可行的。本系统开发不会对外发行或进行商业操作,且使用的编辑器和DirectX SDK均是合法的免费试用版本,不会侵犯他人利益,不会出现侵权等问题,一切按照国家法律,因此具有法律可行性。综上所述,从各方面的可行性进行考虑,本次开发方案采用方案2是最佳选择。2.3 方案总结通过以上方案论证,我得出一套太空飞行射击游戏的制作方案,操作系统采用Microso
29、ft Windows 7,开发环境选择Microsoft Visual studio 2008,使用库为DirectX9.0c。使用的开发语言为C+语言。第3章 需求分析3.1 功能行为需求描述3.1.1 太空飞行射击游戏用例建模1.确定执行者整个“飞行射击小游戏系统”只有一个执行者,即玩家,其活动如下:玩家:通过键盘上下左右键转换Playerplane上下左右移动,通过空格键发射子 弹。在内部的子系统之间的用例中,还有一个子系统外的执行者,即游戏引擎。2.确定用例对整个游戏系统进行分析,总结出以下用例。(1)“太空飞行射击游戏”中的用例在第一层,根据“太空飞行射击游戏”的模块功能,可选的用例
30、有:Player飞机功能Enemy敌机功能角色管理系统场景设置系统特效设置系统碰撞检测系统(2)“Player飞机功能”中的用例在第二层,根据player功能的要求,可选的用例有:playerplane的移动playerplane射击player状态反馈(3)“Enemy敌机功能”中的用例在第二层,根据Enemy功能的要求,可选的用例有:enemy移动enemy射击enemy状态反馈(4)“角色控制系统”中的用例在第二层,根据角色管理系统的要求,可选的用例有:实体数量实体实例化实体生命值实体注销(5)“场景设置系统”中的用例在第二层,根据场景设置系统的要求,可选的用例有:游戏背景(6)“特效控
31、制系统”中的用例在第二层,根据特效控制系统的要求,可选的用例有:爆炸特效(7)“碰撞检测系统”中的用例在第二层,根据碰撞检测系统的要求,可选的用例有:playerplane的碰撞强度enemyplane的碰撞强度子弹的碰撞检测碰撞伤害记录3.分层绘制用例图(1)最高层用例图“太空飞行射击游戏综合设计”用例: 图3-1 太空飞行射击游戏用例图 (2)第二层用例图“Player功能”用例图3-2 Player用例图“角色管理系统”用例图3-3 角色管理用例图“Enemy敌机功能”用例图3-4 Enemy敌机用例图“场景设置系统”用例图3-5 场景设置用例图“特效控制系统”用例图3-6 特效控制用例
32、图“碰撞检测系统”用例图3-7 碰撞检测用例图4.太空飞行射击游戏综合功能用例描述“太空飞行射击游戏综合功能”用例描述(1)“Player功能”用例用例名:Player功能执行者:玩家目的:本功能模块主要负责Playerplane的所有功能的实现,包括移动、 射击以及状态反馈等。过程描述:进入游戏界面后,点击开始键,进入游戏场景。屏幕上可以直观显示自己当前的状态(例如自己的生命值和敌机的状态)。根据当前状态选择飞机的移动方式。结束游戏。异常事件流处理:追踪子弹未命中敌机,需重新射击。(2)“Enemy功能”用例用例名:Enemy功能执行者:游戏引擎目的:本功能模块主要负责Enemy敌机的所有功
33、能的实现,包括随机移动、 射击以及状态反馈等。过程描述:进入游戏界面后,点击开始键,进入游戏场景。从屏幕上显示当前的状态和玩家的状态。根据当前状态Enemyplane随机移动。循环执行以上操作。结束游戏。异常事件流处理:随机移动时,避免与其他障碍物相撞。(3)“角色管理系统”用例用例名:角色管理系统执行者:游戏引擎目的:角色管理系统主要根据游戏实体的数量来确定是否进行实体实例化,通过生命值监测来判断是否对实体进行销毁。过程描述:进入游戏界面后,点击开始键,进入游戏场景。获取实体的数量和实体的生命值。根据实体的数量实例化实体。根据实体的生命值销毁实体。 循环执行以上操作。结束游戏。 异常事件流处
34、理:同类实体数量一定,所以实例化时以同类实体为准。(4)“场景设置系统”用例用例名:场景设置系统执行者:游戏引擎目的:本系统主要负责绘制背景,尽量使场景真实。过程描述:进入游戏界面后,点击开始键,进入游戏场景。播放场景。循环执行以上操作。 结束游戏循环执行以上操作。异常事件流处理:(5)“特效设置系统”用例用例名:特效设置系统执行者:游戏引擎目的:本部分主要用粒子系统模拟现实场景,包括碰撞、爆炸、射击等效果。过程描述:进入游戏界面后,点击开始键,进入游戏场景。若有实体碰撞发生,则播放粒子效果,根据要描述效果的强弱,选择粒子的播放时间和粒子的播放规模。若有射击,则描述效果的强弱,选择粒子的播放时
35、间和粒子的播放规模。 循环执行以上操作。结束游戏。 异常事件流处理:粒子的生命周期结束但却未销毁,所以导致系统变慢,因此提前设定好销毁时间。(6)“碰撞检测系统”用例用例名:碰撞检测系统执行者:游戏引擎目的:本用例主要功能为检测碰撞,通过对碰撞的检测来计算实体的伤害值。过程描述:进入游戏界面后,点击开始键,进入游戏场景。若有实体碰撞发生,则判断碰撞的程度,记录实体伤害值循环执行以上操作。结束游戏。 异常事件流处理:地面也许加入碰撞检测,但地面在碰撞后不可以消失,所以地面不计伤害值。3.1.2 活动图扩展 1.“太空飞行射击游戏”操作活动图图3-8 操作活动图 2.“太空飞行射击游戏综合功能”活
36、动图图3-9 综合活动图3.1.3 功能模块划分通过进行需求分析,场景生成、变换镜头、游戏操作、获取信息和物理系统这五个部分是系统需要实现的。但是在我们的实际运作中,系统的架构和扩展能力也应该在我们的考虑之列。所以需要把游戏系统划分为系统架构、粒子系统、模型、辅助和碰撞检测这五个模块。其中,场景生成的功能使用模型、粒子系统和碰撞检测这几个模块来一起来完成。游戏的操作由系统架构模块进行按键响应,具体的实现是由模型模块来进行的5。碰撞检测模块可以完善游戏的物理系统。而且辅助模块可以实现信息获取。图3-10 功能模块划分3.2 性能需求特别要注意的是游戏软件在实时性方面有着非常高的要求,这也是它与其
37、它软件不同的地方,除了要能够稳定运行在特定各种的硬件环境和操作系统环境下,而且必须要保证运行时的流畅性。在我们游戏设计的时候,要特别注意功能实现与运行效率之间所存在的矛盾,如果功能太多而使游戏的运行不流畅的话反而使玩家达不到一个好的游戏体验。从理论上来说,我们划分了几个阶段来对游戏的流畅度进行了划分,第一个阶段是游戏程序的渲染帧率在60 帧/秒以上,这个阶段的游戏能流畅运行;第二个阶段是渲染帧率在3060 帧/秒之间,在这个范围之内则认为游戏仅只是可以运行;第三个阶段是帧率保持在 30 帧/秒以下,如果存在于这个范围之内,那么我们就任务这个游戏就未达到运行需求,运行的不流畅将严重影响玩家体验。
38、在这个太空飞行射击小游戏中,物体的存在不是非常多,我们为了能够保证游戏能够流畅运行,所以要求帧率达到 60 帧/秒以上。3.3 运行需求运行本系统的最低硬件要求:Intel Pentium 4 1.5GHz CPU(及以上)3D显示卡256M 内存20M 可用硬盘空间键盘、鼠标、音箱(可选)运行本系统的软件要求:Microsoft Windows XP/Vista/2000/7Direct X 9.0C运行库3.4 设计约束3.4.1 硬件约束运用DirectX加强2D太空飞行小游戏场景的画面效果,我们不需要为了每一款硬件去编写不同的驱动,使我们的用户体验也变得简单方便。很早之前在骨灰级玩家在
39、DOS下玩游戏时,仅仅只是安装在电脑上是不能玩的,还有好多准备工作需要做,他们必须要先对声卡的品牌和型号进行设置,之后还要对存取模式、中断、输入与输出进行设置,无论其中的那一项出现问题,那么游戏声音就发不出来,这种繁琐的操作不仅让玩家伤透了脑筋,就连游戏开发者也非常头痛,为了让游戏的运行平台更大众化,开发者要在开始制作游戏的时候,收集到当今全部的声卡硬件数据,然后针对不同的API来写不同的驱动程序,对于大部分游戏公司来说,这么做是很难做到的,所以在当时很难出产多媒体游戏,但是有了DirectX之后就不一样了,只要游戏开发的时候依照的是DirectX,不管显卡、声卡是什么型号,统统都能玩,而且还
40、能达到最好的效果4。当然,我们要使用支持DirectX的显卡、声卡驱动程序。3.4.2 可移植性 DirectX是由微软公司创建的用C+语言进行实现的多媒体编程接口。被广泛使用于Microsoft XBOX、Microsoft XBOX 360、Microsoft Windows和ONE电子游戏开发。所以基于DirectX所开发的2D太空飞行射击小游戏只能应用在基于Windows的平台。 第4章 概要设计设计软件的结构并划分出系统的物理元素是本阶段首要任务,在定义软件的任务之后就需要对总体的程序进行框架构造,即根据系统分析来确定使用什么模块来完成这个系统,需要对这些系统和模块进行有机的的结合,
41、并且保证每个模块的功能得以实现。系统能够实现所有要求的功能是系统设计的目的,同时还必须要达到高效性、可修改性、高可靠性,并能够简单的操作跟使用。4.1 系统总体设计4.1.1 游戏引擎结构设计一款成功的游戏必定在两方面做得非常好:其一是游戏性,其二是引人注目的画面。纵观整个游戏史,渲染技术和真实感图形所带来的影响首屈一指。缤纷的画面使游戏能够表达出更多令人沉醉的内容。可编程 GPU 诞生之后,多数计算机上都使用了3D 图形技术,让游戏中的虚拟世界变得越发的真实,这种逼真的代入感正是大部分玩家所追求的,也正是广大游戏开发者们所希望看到的。游戏引擎作是制作一款理想中的游戏所必须的,它是制作整个游戏
42、的基础。一切可以用来开发游戏的专用工具软件被叫做游戏引擎,它的本身包含了了游戏开发所需要的所有应用编程接口函数,游戏的制作技术水平也是它决定的,驱动性、独立性和完整性是所有游戏引擎都应拥有三个特点5。驱动性是游戏引擎的最大特点。游戏引擎并不专注于某个具体方面的应用,它所要达到的目的是是否能够实现这个应用,让这个实际的需求能够用游戏引擎做出来。完整性是指引擎能够为开发者提供一整套的游戏开发相关函数集,开发者能够让最初的开发计划完美实现。独立性是指游戏引擎中的物理学、网络、图形渲染等模块在实际运用的时候应该是相互独立的。因此,同一个游戏引擎可以应用于多个游戏项目的设计与开发,大大缩短了开发周期。在
43、结构上游戏引擎可分为系统层(System)、游戏介质层(Game Interface)、控制台(Console)、图形渲染内核(Renderer/Engine Core)、物理数学支持层(Support)、开发工具层(Tools/Data)。游戏引擎的结构设计是非常重要的,它与游戏开发的流畅性、效果,以及开发周期息息相关。图4-1所示的便是具体的结构设计图。图4-1 游戏引擎结构设计图4.1.2 逻辑结构设计完整的游戏应具有完整的游戏循环。我们应该制定合理的游戏规则,规定:玩家驾驶飞机不断击落来回游荡攻击的敌机,在攻击方法上可以采用多种方法,并且每击落一架敌机都可以获得一定的分数,如果撞在山上
44、、地面或者敌机,则飞机发生爆炸,游戏结束6。 游戏开始否是否射击是否是否击中是销毁敌机加分游戏结束图4-2 游戏设计流程图4.2 功能模块设计4.2.1 系统模块架构首先系统需要对Windows 程序框架进行创建,需要使用 Win Main 函数来调用 Setup 函数,D3D类是使用Setup函数构建的8。本函数在调用d3d:InitD3D函数来建立d3d 类的时候,使用WindowsSDK框架创建了窗口。通过检测系统硬件设备的性能的指标在窗口中创建不同的DirectX程序实例。通过Setup 函数完成对CD3DInput 类的初始化,该类主要作用是操纵外设输入硬件接口。在初始化过程中还需要
45、使用 CreateInput 调用 DirectX的输入接口,来进行初始化键盘和鼠标输入设备。并且Setup 函数还为其它模块的调用提供了系统构架,对其它模块的类提供了初始化1。系统完成初始化后,就要进入消息循环的阶段。由 d3d:EnterMsgLoop函数来完成这一阶段。队列中的消息会由EnterMsgLoop 进行获取及解析,并进入消息循环,帧渲染函数将会收到它用消息间隔时间生成的参数。在帧渲染函数中,第一个进入的是游戏的逻辑循环,即渲染需要前优先判断游戏所处于的状态,到底是游戏通关,游戏进行中,还是游戏失败。如果是游戏进行状态,则调用每个模块框架更新功能模块更新,然后调用渲染功能。如果
46、不是游戏状态,则跳出逻辑循环,弹出相应的成功或失败画面。在完成渲染帧之后,Windows 框架需要调用 WndProc 对消息进行处理。在本游戏中,消息处理主要是对于键盘鼠标的按键进行响应。其中不但有普通的按键响,而且还添加了一种特殊的响应,那就是识别和响应连续按键输入。在这种情况之下,如果用户连续按同一键,如长按一个键则只算输入一次,若该键弹起再按下则第二次输入有效。4.2.2 系统体系结构建模系统体系结构,又被人们称作架构,指可以预制和可重构的软件框架结构。构建是一种可预制和可重用的软件的部件,而体系结构的基本计算单元或数据存储单元便是构建;连接件也是可预制和可重用的软件部件。建立软件体系
47、结构模型的方法和过程是系统体系结构建模。软件体系机构模型会使人们从全局上把握整个软件系统结构变得直观容易。软件体系结构建模是软件体系结构应用的重要途径,也是软件体系结构研究的一个重要领域。对于本游戏,总体可以分为窗口管理器模块,命令管理器模块,主程序和类,DirectX图形库这几个部分。在主程序和类中,功能模块可以具体分为模型加载、实时地形、粒子系统、碰撞检测、辅助功能这5个模块。这些模块可以执行模型的导入、实时地形的建立、粒子的创建与销毁、模型之间的碰撞检测和系统的辅助功能。其中辅助功能主要有特殊文字的导入,2D图片的处理等功能。4.3 关键算法碰撞检测(Collision Detectio
48、n)是一项几乎在所有游戏中都要使用的技术。在一个虚拟的世界中,所有场景中的物体之间都存在物理作用,而这些作用都离不开碰撞检测。在本文所研究的太空飞行射击游戏制作中,飞机、子弹和地面三者之间的物理交互,也正是由碰撞检测完成的。创建一个有效的碰撞检测系统就像是在摆积木,我们需要将一个待检测物体合理的划分成块,再按照一定逻辑将这些碰撞模块组合起来。因此,碰撞检测之中的关键问题便是如何进行相应的逻辑判定,以及如何设置包围体。本节将从游戏中的这种关键算法入手,即碰撞检测。文章对这种算法的深入剖析,这将有助于构成程序中的关键模块,并能完成游戏体系设计。4.3.1 碰撞检测算法 在2D游戏中,常用的碰撞检测
49、算法有矩形检测,圆形检测,像素检测等。矩形检测一般情况下在数学运算中常用的直角坐标系X,Y(如图4-3所示),X轴方向向右为正方向,Y轴方向向上为正方向。而电脑屏幕的坐标轴的原点却是在屏幕的左上角,并且Y方向向下为正方向(如图4-4所示)。Y 0 x y0 x图4-3 常用坐标系图 图4-4 电脑屏幕坐标系矩形检测就是利用所给图片左上角的坐标,宽度,高度,进行一系列的运算,然后将新得到的坐标进行比较,判断新得到的坐标是否重合12。此方法适用于地图中的物体为规则图形或近似为规则图形,当然也可以用在碰撞精度要求不高的情况下。假设矩形A的参数是:左上角坐标为(x1,y1),宽度为w1,高度为h1;矩
50、形B的参数是:左上角坐标为(x2,y2),宽度为w2,高度为h2。(如图4-5)BA (x1,y1) (x2,y2) h1 h2 w1 w2图4-5 在检测中,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向上的距离的绝对值小于等于矩形高度的二分之一。(如图4-6所示)。 (x1,y1)BA h1 (x2,y2) h2 w1 w2图4-6具体的数学表达式为:X方向:(x1+w1/2)-(x2+w2/2)<(w1+w2)/2Y方向: (y1+h1/2)-(y2+h2/2)<(h1+h2)/
51、2实现原理:检测两个矩形坐标点是否重合。优点:运算速度快,效率高。缺点:碰撞精度不高,无法应用于不规则图形。圆形检测 圆形检测就是判断两个圆形是否发生碰撞,也就是说判断两个圆的圆心距离和两个圆的半径之和之间的关系。 可以假设A的参数是:左上角坐标为(x1,y1),半径为r1,B的参数是:左上角坐标为(x2,y2),半径为r2。具体的数学表达式为:(x1-x2)2+(y1-y2)2<(r1+r2)2实现原理:检测两个圆心之间的距离是否小于两个圆的半径之和。优点:碰撞精度相对较高。 缺点:运算速度慢,效率低。像素检测 像素检测就是判断两个物体之间发生重合部分的像素值变化。即像素值为0时,表示
52、未发生碰撞,像素值不为0时,发生碰撞。而现今这种碰撞检测算法多被采用封装类。可以假设有物体A和物体B(如图4-7所示),两个物体目前的像素值为0,即未发生碰撞。然后将物体B向物体A移动,并且使他们发生碰撞,会出现两种不同的深度(如图4-8,4-9所示)。AB图4-7AB图4-8BA图4-9从图4-8和4-9可以看出,物体A和B发生了部分碰撞,也就是说两个物体其他部分的像素值不变,碰撞部分的像素值发生变化。而综合图4-8和4-9碰撞产生的不同深度,将可以得到两个不同的集合,然后将两个集合中的像素值进行相减得到一个新的像素值。即1. 物体A和B的交集部分的像素值不同时为空,相减之后,如果结果不为空,则可以判定A和B有碰撞,如果结果为空,则可以判定没有发生碰撞。2. 物体A和B的交集部分的像素值同时为空,这样只有一种结果,即为空,这种情况通常认为A和B没有发生碰撞。 综上所述,可以根据交集部分的像素值是否为空来判断两不规则的形状是否发生碰撞。 实现原理:检测两个物体相交部分的像素值,根据像素值的变化判断两个物体是否发生碰撞。优点:碰撞精度高。 缺点:运算效率低。4.4 本章小结 本章详细阐述了太空飞行射击游戏的设计问题。对软件的设计做了总体的规划。然后根据总体设计,把系统划分为五个模块。同时还介绍了游戏流程,编辑程序的逻辑结构。接着,详细叙述了五个模块,对每个模块逐一设计。并从每
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 7391-2025海洋调查船术语
- 2025年关于为山东铁路检察机关公开招聘聘用制书记员的备考题库及一套完整答案详解
- 2025国家税务总局天津市税务局录用公务员报到笔试历年参考题库及答案
- 2024年天津市公安局宁河分局招聘警务辅助人员考试真题
- 清远市公安局公开招聘警务辅助人员200人备考题库及一套参考答案详解
- 2024年中国刑事警察学院辅导员考试真题
- cr12热处理课程设计
- 2025 九年级语文下册写作细节描写强化课件
- 2025青海西宁市城东区城市管理局面向退役士兵招聘执法辅助人员10人参考考试题库及答案解析
- 2025四川港荣数字科技有限公司第一批项目制员工招聘3人考试核心题库及答案解析
- 公路计量支付培训
- 2025年沈阳华晨专用车有限公司公开招聘参考笔试题库及答案解析
- 2025年河北石家庄市招聘工会社会工作人员25名笔试历年题库带答案解析
- (已瘦身)(新教材)2025年部编人教版三年级上册语文全册期末复习单元复习课件
- 介入手术护理配合
- 在线网课学习课堂《人工智能(北理 )》单元测试考核答案
- 实验室安全与防护智慧树知到期末考试答案章节答案2024年青岛滨海学院
- JJG 703-2003光电测距仪行业标准
- 高州市2022年“缅茄杯”学科竞赛数学试卷及参考答案
- 第13章-狭义相对论习题
- 中国石化油品销售企业实验室信息管理系统LIMSWeb操作手册
评论
0/150
提交评论