收藏 分销(赏)

物理教育游戏中的引擎设计实现论文.doc

上传人:仙人****88 文档编号:8922750 上传时间:2025-03-08 格式:DOC 页数:36 大小:360KB
下载 相关 举报
物理教育游戏中的引擎设计实现论文.doc_第1页
第1页 / 共36页
物理教育游戏中的引擎设计实现论文.doc_第2页
第2页 / 共36页
点击查看更多>>
资源描述
毕业论文 第31页 毕业设计(论文) 设计(论文)题目: 物理教育游戏中的引擎设计与实现 学生姓名 学生学号 专业班级 指导老师 院长 (系主任) 5月27日 物理教育游戏中的引擎设计与实现 摘 要 本文简要介绍了该课题的来源及研究意义。通过对当前教育类游戏的发展现状与趋势的分析,总结出教育类游戏所存在的不足。针对当前教育类游戏设计概念匮乏,设计目标不明确,缺乏创新性等弊端,通过一些试验性的游戏设计来进行可行性的探索,并辅以相关原型的开发和实现来提供一个直观实验和研究结果。本文对游戏设计理论进行深入的研究,通过对玩家心里分析以及游戏性的探索,总结出游戏和学习的结合点。 游戏原型选择了Microsoft的XNA Game Studio来进行开发,本文对开发方式和方法进行了简单的介绍。物理引擎作为原型主要的实现方式,通过对现实各种物理状态的模拟来提升游戏中的游戏性。本文对物理引擎的实现进行详细的讲解和介绍。 关键词:教育游戏; 物理引擎; XNA Game Studio; C# The Game Engine of Physic Education Design and Implementation Abstract This paper introduces the topic of the source and the meaning of the current educational game development status and trends. Based on the analysis of current educational game development status and trends, I have discussed the way to solve the problem of the scarcity of current educational game design concept, and the lack of innovation in game design theory. Through the experiment of the game design to explore the resolving which have talked above. Finally, a game prototype will be product to validate my design suppose. In this paper, I have made a research of the game play in game and the game play in education, to find the integration point in the game and education. The technology of Prototype games developed closed the XNA Game Studio which developed by Microsoft, in this paper, I will make a simple introduce of this technology which issuance in this year. I guess it will be the most important technology in the future. Physical engines are the main way to achieve this prototype, through various physical reality simulation games to enhance game play of the game. In this paper, the physics engine for the realization of detailed explanations and introductions. Key words: Educational games; physics engine; XNA Game Studio; C# 目录 1. 绪论 1 1.1 课题来源及研究意义 1 1.2 课题研究现状及存在问题 1 1.2.1 发展现状 1 1.2.2 改进方法 2 1.3 本文结构 3 2. 游戏设计与策划 4 2.1 游戏概述 4 2.1.1 游戏名称 4 2.1.2 游戏类型 4 2.1.3 游戏背景 4 2.2 游戏特点 4 2.2.1 游戏性 4 2.2.2 益智性 5 2.3游戏设定 5 2.3.1 世界设定 5 2.3.2 游戏规则 5 2.3.3 角色设定 6 3. XNA 游戏开发技术 7 3.1 XNA 概述 7 3.2 XNA 素材管道 7 3.2.1 导入器 7 3.2.2 素材处理器 8 3.2.3 序列化 8 3.2.4 加载器 8 3.3 应用程序模型 8 3.3.1 创建新游戏 8 3.3.2 游戏循环周期 9 3.3.3 开始游戏 9 3.4 图形图像 10 3.4.1 2D图像概述 10 3.4.2 3D 图形概述 12 3.5 输入 14 3.6 声音 15 4. 物理引擎 16 4.1 基本物理学定律 16 4.1.1 质量 17 4.1.2 时间 17 4.1.3 位置 17 4.1.4 速率 17 4.1.5 加速度 18 4.1.6 力 18 4.1.7 动量 18 4.2 动量守恒 19 4.3 模拟重力 19 4.4 模拟摩擦力 20 4.5 碰撞检测 22 4.5.1 简单碰撞检测 22 4.5.2 精确碰撞响应 25 4.6 物理模型 28 结论 29 致谢 30 参考文献 31 1. 绪论 1.1 课题来源及研究意义 近年来,电脑游戏产业蓬勃发展,众多青少年学生也表现出了对电脑游戏的浓厚兴趣,社会各界对青少年迷恋电脑游戏感到担忧[1]。许多教育研究人员由此提出将游戏应用于教育,让学生将对游戏的浓厚兴趣转变为学习动机。化弊为利。学习效果也将事半功倍。因此我希望,能够通过此次毕业设计。在这个方向做一些探索和研究,为中国教育游戏发展,尽自己的一份力量。 1.2 课题研究现状及存在问题 1.2.1 发展现状  现阶段在教育和游戏的结合点上做一些探索和尝试——开发教育游戏软件(很多文章直接称为教育游戏) [2],用游戏的感性迎合学习主体的心理特征,用教育的理性不断的把学习主体引向理性。不仅能磨合传统教育中教育内容和教育主体之间的错位,而且有利于游戏产业(尤其网络游戏产业)摆脱目前这种经济价值很高,社会价值为负的尴尬局面,使教育与游戏两大行业能够协同发展。经过几年的发展,教育游戏软件在技术含量、种类、易用性、产业化水平、普及程度上都有了极大提高。目前市面上的教育游戏软件依据版本可分为单机版,网络版两类;按照常规游戏分类方法定位教育游戏软件的学习场景, 又可分为角色扮演类(RPG)、即时战略类(RTS),策略与战棋(SLG),模拟经营(SIM)等:从使用对象看,大部分教育游戏软件直接定位在中小学,以“寓教于乐”、“名师讲解”、“轻松学习”为卖点,学科内容更多的集中在外语、计算机等为数不多的科目上。教育游戏软件在教学的应用中基本表现为世界探索、游戏化练习、虚拟环境(社区)、合作学习以及各种游戏味道很淡的FLASH,JAVA程序等类型,目前国内很多教材的配套光盘已经配备了一些游戏化的练习。在国外,以美国ExplorerLeaming公司、Crocodile Clips公司、夏威夷大学、加利福尼亚大学等为代表[3],他们以FLASH、1AvA等编写可控虚拟实验插件程序并发布在网络上,支持学习者开展各类科学实验。极大地方便了各地学习者的共享学习。即便如此,国内教育游戏软件的前景并不乐观,教育游戏软件的发展始终没有质的突破。尽管大部分学者认为电脑游戏是一种很好的学习资源或学习环境,但是在真正应用到课堂教学的时候却碰到了各种困难。社会对教育游戏软件的认可与其应有的地位极不相称。究其原因,是当前的教育现状与教育游戏内部运作的不成熟制约了教育游戏的发展。从教育大环境看,目前教育,尤其是基础教育中极端的功利主义倾向,学生学习方式的多样性和学习积极性受到极大的破坏,很难产生游戏中“痴迷”的现象;家长和教师对计算机、网络的了解普遍滞后于学生,因而对教育游戏软件多少持有抵触情绪。这都使得教育游戏软件无形之中被赋予不公正的待遇;随着我国基础教育新?轮课程教材改革的实施、校本教材的多样化。导致教育游戏软件的开发成本大幅增加;加上国内软件市场盗版严重,造成为数不多的教育软件厂商苦苦支撑的局面,这些均不利于教育游戏软件的发展。 其次,从教育游戏内部的发展来看,教育游戏软件明确的指向性极大地限制了教育游戏软件的设计方向。与一般软件的开发不同,教育游戏软件的开发既要考虑产品的卖点与潜在市场价值,也应该考虑到如何在场景中融人游戏元素的问题。其中关键是要理解教育研发与技术研发融合的基本规律, 这要求开发人员具备广博的心理学知识、现代课程论知识,并在实践中体验感悟。然而目前国内的IT界,教育游戏软件的开发一般都是各软件厂商负责,一方面由于认识和知识上的局限,往往通过招收个别程序设计人员进行研发,使游戏仅仅成为一种“糖衣”。一种“包装”,而忽略了教育游戏的精髓的开发;有的则是由于资金所限无法进行系统的设计;同时教育界内部教育游戏开发的技术型人才也非常匮乏,凡此种种都使教育游戏软件的发展陷入困境。 1.2.2 改进方法 而在目前可能存在的教育和游戏的结合点当中,游戏化实验教学是应该优先考虑到的。实验教学强调学生自主探索创新。注重实际操作。鼓励协作学习和研究,这些特点与电脑游戏给玩家带来的特征十分相似[4],因此,游戏应用于实验教学相对于其他领域更有其优越性。只有调动学生的主观能动性,允许学生自由操作并随时随地进行实验,才能利于培养学生的探索创新精神。真正达到实验教学的目的。但从目前的发展情况来看。教育类游戏还未达到理想的效果。究其原因。主要是教育类游戏在形式和策略上仍欠缺魅力。没有充分发挥现有技术的优势,在创设情景、激发学生学习动机及学习心理等多方面考虑甚少。因此,对游戏的一些设计模式及思想进行深入的研究。并更多地考虑电脑游戏在实验教学领域的整合与应用,将使实验教学以更加灵活、人性化的形式向前发展。 1.3 本文结构 本文绪论部分介绍了本系统的课题来源以及研究的现状和问题。 第二章介绍了游戏设计的方法和具体的设计方案。 第三章详细介绍原型开发所采用的工具以及技术。 第四章详细介绍了物理引擎开发的技术和实现。 总结部分介绍本次设计成果以及心得体会,并总结经验教训。 2. 游戏设计与策划 2.1 游戏概述 2.1.1 游戏名称 滚珠 2.1.2 游戏类型 益智休闲类游戏 2.1.3 游戏背景 在中国进行“神舟X号”即将发射前24小时,飞船已经在发射塔上准备就绪。而就在这时,在飞船的研究实验室中,一个零件装载机械臂发现一个从飞船的轴承上掉落下的滚珠。一个不会说话的机器人无法告知人们飞船的零件出了故障,它能做的就是和他的伙伴一起,把滚珠送回飞船上。从实验室通往发射塔的路充满了艰难险阻,看你如何用你的智慧,帮助机器人们完成这个看似难以完成的任务。 2.2 游戏特点 2.2.1 游戏性 (1)挑战的乐趣。 整个游戏由许多关卡构成,关卡的难度是逐步提升的。每一个关卡对玩家来说都是一个挑战。只有利用自己所学的知识,经过一定的计算,才能够顺利的通关。通关之后,玩家会得到一个分数,这个分数决定了玩家的等级。也就是说,玩家不仅在一个关卡当中得到了挑战,同样他也接受着周围玩伴的挑战。当然,一个游戏的最大吸引力就是在于玩家顺利的通过挑战。得到应有的尊敬。 (2)探索的乐趣。 游戏的世界[5]对于玩家来说是未知的,玩家不知道下一个关卡的构成,以及出现的人物。游戏的过程并不是单一的,虽然每一个关卡只有一个开始点和一个结束点,但是玩家可以通过各种途径来得出结果。当然,通过最简便方式通关的玩家会得到相应的奖励。因此,在游戏中玩家永远保持着一个好奇的心。 (3)实践的乐趣。 相信许多人都有过过在课堂中所有的学习的目的只是为了做题目的感觉,而这个游戏为我们所掌握的知识提供一个可以利用他们的平台,没有一定的物理和数学的知识,是很难通关的。 只有当自己利用自己所学的知识,通过了关卡,那种胜利的感觉是不言而喻的。 2.2.2 益智性 益智性[6]是本游戏最大的亮点。而且本游戏和普通的益智游戏最大的不同是本游戏采用在物理课堂上所学习的知识作为本游戏的基础。也就是说没有一定的物理知识,是无法顺利的通关的。 不同于其他教育类游戏,本游戏将所需要掌握的知识很好的融入到游戏当中,没有枯燥的答题,取而代之的是生动的游戏,玩家通过对游戏的操作,模拟在物理实验室中的活动。而且在游戏当中,可以模拟出在物理实验室当中无法实现的过程,比如说重力的改变等等。这样可以使玩家更全面,更灵活的掌握在物理课程中所学习的知识。 游戏的过程采用数字与动画相对应的模式。玩家如果不通过数字精确的计算是很难达到通关的要求。而动画对数字的模拟,可以最大程度的提升玩家的置入性。玩家不会因为枯燥的数字而拒绝游戏。 2.3游戏设定 2.3.1 世界设定 游戏中的世界是在最大限度上对现实物理运动的模拟。玩家所处的场所在飞船的研究实验室当中,玩家操纵机器人对滚珠进行传递。途中会经过不同特性的实验室,在不同的实验室当中,玩家都需要利用自己的知识去应付不同的物理环境。 2.3.2 游戏规则 玩家进入游戏之后,会有3次机会。必须在规定的时间当中,利用不同的机器人的不同特性,操纵滚珠从起始位置到达指定的地点。这样算做顺利的通关。玩家的通关分数为所剩生命数乘以所剩时间数。 当玩家3次机会使用完毕之后,算做游戏结束。玩家在通关过程当中如果采用最优化的路径或者算法,可以得到相应的奖励。 2.3.3 角色设定 图2.1 角色设定表 名称 图片 属性 滚珠 位置 高度半径 质量,当前速度 距离控制机械臂 位置 臂高度 臂位置 初速度控制 器 位置 高度 初速度 坡度控制器 角度 位置 高度 小车 重量 改变质量 3. XNA 游戏开发技术 3.1 XNA 概述 微软在2006年发布了XNA Game Studio Express[7],在XNA中,X代表微软掌握的技术资源,DirectX和Xbox;N代表次世代(Next Generation);A代表架构(Architecture)。以DirectX为原型,微软希望把XNA发展为所有游戏开发平台的通用标准。如此一来将实现游戏开发工具的无缝嵌入和平滑过渡。而XNA Framework是一系列帮助开发人员编写游戏的类库。 XNA Framework的一个关键目标是实现游戏在Windows和Xbox 360分别运行的简易性,可以先在Windows上开发一个游戏,然后简单的移植到Xbox360上去。XNA Framework提供一系列可以涵盖大约95%功能的跨平台APIs。估计大部分游戏是跨平台的。 制作游戏是一项有难度的工作。任何人想要成为专业游戏开发人员都十分的困难。常常要在如何实现绘图,输入,运动等地方反复试验而浪费大量的时间和代码。XNA Framework的另一个目的就是使这一切变得容易起来,使你可以在头五分钟内开始编写你的游戏。不必要考虑创建窗口,消息事件队列的弹出和处理,不需要给出图片处理程序甚至掌握显示模式。不需要创建一个图形设备然后在窗口重新定义大小和最小化的时候管理它。XNA Framework替你处理了这一切。要做的第一件事就是为你的游戏逻辑写代码。 3.2 XNA 素材管道 XNA Framework素材管道[8]用来简化把外部数字素材转化到XNA Framework工程的过程。从一件游戏素材被创建(比如一辆车或者人物模型),到素材可以被实际游戏代码访问的过程可以分为四个主要的步骤。 和素材管道的概念相对应,在开发过程中以下这些步骤会按顺序发生: 3.2.1 导入器 导入器是由第三方开发的,用来转换特定工具创建的素材文件。 例如,素材管道包含了两个导入器以支持主流的素材格式:DirectX的 X文件(.x)和Autodesk FBX格式(.fbx)。 这个导入器导入基本的几何体类型,如:网格和顶点,并转换成相关素材处理器使用的中间格式。 当素材第一次被编译的时候,导入器读入外部导入的原始文件,然后把数据转换成所支持的“文档对象模型”(DOM)类型。这些类型包括了多种作为表示资源的强类型,例如表示网格,顶点,还有材质资源的类型。 一旦导入器为导出的游戏对象读入数据,数据将被传给素材和图象的DOM。这些 DOM 将作为素材和图象对象的强类型来负责表示这些导出的数据。 3.2.2 素材处理器 素材处理器接收在上一步中为每一个标准DOM类型而生成的托管对象作为输入参数。但是,如果素材处理器生成了一个自定义的托管对象,任何的功能(包括加载和保存到二进制文件)都必须由开发者自己编写。素材处理器依赖于特定类型的资源。举个例子,如果资源包含了网格对象,那么将生成基于 MeshContent 的对象。 3.2.3 序列化 在游戏资源加入到工程以后,素材管理器会生成托管代码。托管代码被序列为一个精简二进制格式。这个格式仅为XNA Framework设计,无法应用于其他的运行端。 3.2.4 加载器 最后一步是的加载器类。 它负责在游戏运行时加载和卸载托管代码。从一个高级层次来看,一次编译操作就可以协调和控制素材管道,它协调所有组件的执行,并且看起来和Visual C# Express编译相似。 它生成相应的二进制,并提供错误处理和其他常见的编译功能。 3.3 应用程序模型 3.3.1 创建新游戏 创建新游戏的第一步就是要创建Game类的派生类。该新类需要重载Update、 Draw和Initialize。Update方法用于处理游戏逻辑,Draw方法用于绘制每一帧, Initialize方法用于在游戏开始之前初始化。 3.3.2 游戏循环周期 Game的循环周期要么是固定的要么是可变的,默认的是固定的。周期的类型决定了Update被调用的频率,同时也会影响程序中那些以时间为基础的函数的运行,例如移动、动画等。 一完成上一帧的渲染,可变周期的Game 就会调用它的 Update方法。将Game.IsFixedTimeStep 的值设为 false 的话, Game 就会使用可变周期的游戏循环。这种类型的 Game 要求游戏逻辑和动画代码是基于流逝的时间的,这样才能保证游戏流畅地运行。因为前一个帧一完成就会立即调用 Update 方法,所以两次调用 Update 方法之间的时间是可以变化的。不考虑调用之间的时间,游戏看起来好像是变快和减慢了。可以用Update方法的gameTime参数来得到两次调用Update方法之间的流逝时间。 当使用可变周期的游戏循环时,应该确定游戏中的速率――比如精灵的移动距离--游戏中是以每毫秒为单位。在任何给定的游戏更新中,精灵移动的距离都可以使用流逝时间的速率来计算出来。 用这种方法计算精灵的移动距离,即使游戏速度或计算机速度不同,也能保证精灵的连续移动 。 固定周期的Game 类以TargetElapsedTime中特定的固定时间间隔来调用它的 Update方法。将Game.IsFixedTimeStep 的值设置为true , Game 就会使用固定周期的游戏循环。使用固定周期的话,游戏逻辑可以将 Update作为其基本时间单位,并假设将以指定的时间间隔调用 Update 。如果Update运行得比预期的慢, Game类将通过加时调用Update来进行补偿,并且丢弃掉那些无用的Update渲染的图像来节省时间。这可以保证即使游戏循环比期望的要慢,也能调用足够次数的Update。 当使用固定的游戏循环周期,速率(例如精灵的移动距离)将由调用Update的次数决定,这可以允许你通过调用Update来使用Update中的移动速率来改变精灵的位置。 3.3.3 开始游戏 调用 Game.Run 方法开始运行游戏。该方法开始游戏循环,在调用Exit之前,每秒多次调用 Update 和 Draw 方法。 3.4 图形图像 3.4.1 2D图像概述 精灵是取代3D空间而直接绘制在屏幕上的2D位图, 通常用来显示一些玩家信息, 如生命值、生命数或者得分。一些游戏,特别是早期的游戏,几乎全部由精灵组成。 精灵在屏幕上是按坐标定位的。 屏幕的宽和高和后台缓存是一样的(意思是如果你的屏幕为800x600的,那么后台缓存就是一个800x600x每个像素所占的内存数的大小的内存块)。x轴表示屏幕的宽,y轴表示屏幕的高 。一定要注意y轴是从上到下递增的,而x轴是从左到右递增的。例如,当你的后台缓存是800x600时,(0,0)表示屏幕的左上角,(800,600)表示屏幕的右下角(请看图3.1) 图3.1  一个位于屏幕坐标上的精灵(x 轴 400, y 轴 200) 要绘制精灵,必须先创建一个 SpriteBatch 对象 , 通过调用Begin 使其初始化 , 然后对每个精灵调用Draw 方法。 精灵的位图信息可以从Texture2D 对象中得到 。 为了能使部分纹理透明或半透明,纹理要包含alpha通道信息。你可以用Draw 来调节着色,旋转或者缩放精灵。 这个方法也可以让你选择在屏幕上只绘制纹理的一部分。 绘制完后,在调用Present 之前调用End 。 当你绘制精灵时要理解的最重要的概念就是原点。原点其实就是精灵中指定的一个点,这个点默认是在精灵的左上角(0,0)。Draw方法将使用你指定的屏幕位置作为精灵的原点开始绘制。例如,如果你在没有为精灵指定一个原点(即使用默认原点)的情况下在(400,200)的位置绘制一个50 x 50 像素的精灵,这个精灵的左上角将会在屏幕的(400,200)处。如果你使用 50 x 50精灵的中心(25,25)作为原点,想绘制相同的纹理到相同的位置(即上面的使用默认精灵原点绘制的位置),你就必须在屏幕位置上再加上原点的坐标(位置是425,225,原点是25,25,请看图3.2) 图 3.2  蓝色的点标记了精灵坐标的中心 当我们旋转一个精灵的时候,将使用原点作为旋转的中心。这样的话,为了方便,我们就应该在屏幕上绘制精灵时普遍使用精灵的中心作为原点。 精灵也有深度的概念,当你绘制一个精灵的时候你可以指定其深度为0到1之间的一个浮点数。深度为0的精灵将在屏幕的最“前面”,他将覆盖其他深度比他低的精灵。深度为1的精灵将在屏幕的最“后面”,他将被任何深度值小于1的精灵覆盖。 精灵是基于Texture2D 对象的,其实精灵就是一个位图 。 Draw 方法可以绘制整个纹理,或者纹理的一部分。要绘制纹理的一部分,就需要使用sourceRectangle 参数来指定哪些texels作为一个精灵来绘制. texel 其实就是纹理的一个像素。一个 32 x 32 的纹理里包含了1024个texel, 屏幕使用x和y值来指定屏幕上某像素的坐标,纹理的texel坐标也可以使用这种方式指定。指定一个值为 (0, 0, 32, 32) 的sourceRectangle将选择纹理的左上角的32 x 32区域。 Draw 方法提供了三种缩放精灵的方法。Draw 方法可以接受一个统一的缩放参数或者不统一的缩放参数或者是一个源矩形和目标矩形。统一缩放变量是一个浮点数,这个浮点数将和精灵的x和y轴相乘。这将以相等的值缩小或扩大精灵的每个轴,不会改变精灵原来的宽高比。想要独立的缩放x和y轴的话,Draw 方法接受一个Vector2 值作为缩放值。 这个Vector2 指定不统一的缩放:Vector2的X 和 Y 域分别指定了x 和 y 轴独立的缩放值。 Draw 方法也接受一个源矩阵和目标矩阵。目标矩阵指定绘制在屏幕上的哪个位置,源矩阵指定了要绘制的texels。Draw 方法使用sourceRectangle指定的像素并且独立缩放他们的x和y轴直到他可以填满destinationRectangle指定的矩形大小。 默认情况下,调用SpriteBatch.Begin () 将导致 SpriteBatch 实例改变图形设备的设置来为绘制精灵做准备。然后,每次调用Draw 时都将立即使用当前设备设置来绘制精灵。如果调用End时指定了SaveStateMode.SaveState,这将重新复位设备设置。这就是立即模式。在立即模式下,当你调用了一个SpriteBatch的实例的SpriteBatch.Begin ()方法以后,就不应该再调用其他SpriteBatch实例的方法,直到你调用了第一个SpriteBatch的 End 方法。在Deferred 模式下, SpriteBatch 将为每个Draw的调用保存信息,直到他相应的 End 方法被调用为止。当你调用了 End以后,SpriteBatch将该改变显示设备设置,然后将这个批处理中的所有精灵绘制。然后如果指定了SaveStateMode.SaveState,那么End 将会把设备复位。 Deferred 模式比立即模式慢,但是他允许多个SpriteBatch 实例的SpriteBatch.Begin ()和Draw的调用的共同存在而相互之间却没有冲突。你可以传递 SpriteSortMode.Deferred给SpriteBatch.Begin ()来选择使用deferred模式 。 3.4.2 3D 图形概述 3D图形应用程序的应用程序需要以下三个坐标: (1)一套用于世界坐标,视图坐标和投影坐标相互转换的矩阵 (2)一个顶点缓冲区 (3)一个将世界坐标,视图坐标和投影坐标应用于顶点数据的特效 上述的坐标可以使你渲染在XNA中的3D应用程序,可以创建的顶点,创建你特效,应用纹理,还可以通过使用诸如将顶点缓冲区转换为索引顶点数据流等技术来提高程序的性能。 XNA框架使用了光影驱动的可编程的管道,所以需要一个至少支持Shader Model1.1的显卡。当然,我们推荐的是支持Shader Model 2.0的显卡设备。在可编程的管道里,光影和特效可以应用于转换,纹理,灯光和材质。当然,你并不需要为你的第一个3D XNA 程序创建一个自定义的光影。XNA框架提供了一个个叫做BasicEffect 的类,该类封装了大多数常见的操作。 当你用XNA Game Studio Express创建了一个游戏,XNA应用程序模型就已经为你初始化了一个图形设备。你可以通过GraphicsDeviceManager.GraphicsDevice属性来对图形设备做更多的访问和操作. 可以使用 GraphicsDevice.GraphicsDeviceCapabilities 属性来得知图形设备的性能。 资源是指存储在内存中的,可以被CPU或者GPU访问到的一些数据. 程序会用到的资源的类型包括:绘图表面,顶点缓冲区,索引缓冲区,以及纹理贴图。 顶点缓冲区包含了一串用来传递给图形设备的顶点序列。顶点缓冲区中的每一个顶点不仅可以包含这个顶点的3D坐标,还可以包括其他信息,比如:顶点的规范,颜色,纹理坐标。使用一个VertexDeclaration对象来描述顶点缓冲区中包含的数据的类型。XNA Framework中包含了许多类用来描述常用的顶点类型,比如 VertexPositionColor, VertexPositionColorTexture, VertexPositionNormalTexture, 和 VertexPositionTexture. 你可以使用VertexElement 类来组建自定义的顶点声明。 顶点缓冲区可以包含索引的或者非索引的顶点数据。如果一个顶点缓冲区是非索引的, 存储在顶点缓冲区中的顶点将按照被渲染的顺序来存放。 因为3D的线列或者三角形列经常会多次引用同一个顶点,所以会造成很多的冗余数据。 索引格式顶点可以让每个顶点在顶点缓冲区中存放一次。索引缓冲区是按照你想要渲染的顶点顺序排列的,保存顶点在顶点缓冲区中的一系列索引值。 非索引的顶点缓冲区可以通过调用 GraphicsDevice.DrawPrimitives方法或者 GraphicsDevice.DrawUserPrimitives方法来渲染。索引的顶点缓冲区可以通过调用GraphicsDevice.DrawIndexedPrimitive 或者 GraphicsDevice.DrawUserIndexedPrimitives方法来渲染。 纹理资源是用来存储纹理数据的数据集。纹理资源中的数据是由一个或多个以阵列和链的方式组织在一起的子数据组成。当光影(Shaders)程序准备用纹理资源进行渲染时,纹理采样器会做过滤。纹理数据的类型将对怎样过滤产生影响。 用 BasicEffect 类的Texture属性来应用纹理,或者选择你自己写的特效(Effect)方法来应用纹理。怎样将一个自定义的特效应用于纹理,将在例子如何创建自定义的特效。 绘图表面存储着2D的图形数据。如 绘图表面格式列表(SurfaceFormat Enumeration), 绘图表面可以以多种不用的像素格式来保存数据。绘图表面被用作图形设备的前台缓冲,后台缓冲以及页交换链。 光影(Shaders) 是在运行时处理每个顶点和象素的程序。特效是由顶点和象素的Shader代码组成的,被包装起来用来实现特定的渲染效果。 因为特效是在运行时才转换顶点和像素,所以它们用来实现光照,材质和纹理。除非你使用 BasicEffect 类,否则必须先用高级的HLSL语言或者低级的Shader汇编语言编写Shaders,然后把它们编译成二进制代码,这样才可以在你的应用程序中使用。 3.5 输入 输入是普通术语,是获取用户动作的过程。在XNA Game Studio Express中, Microsoft.Xna.Framework.Input命名空间支持3种不同的输入设备:Xbox 360控制器、键盘以及鼠标。概述中主要讲述这3种输入设备之间的差异,并提供如何在游戏中运用它们的指导方针。 输入设备有两种控制方法:数字和模拟。数字控制法只报告两种可能状态——开和关——而且是用布尔值是表示的,Xbox 360控制器上的START按钮和键盘上的其它按钮都是数字控制的例子。 模拟控制法可以报告一系列值,而不仅是关和开两种状态,Xbox 360控制手杆和鼠标的移动都是模拟控制。模拟值可以用多种方法表示。在XNA Game Studio Express中,Xbox 360控制器上的模拟值用浮点数表示,浮点数在−1.0和1.0之间表示手杆,在0.0和1.0之间则表示triggers。XNA Game Studio Express用像素来报告鼠标指针值。 对XNA Game Studio Express中所有输入设备而言,通过Polling方法可以从用户处获取输入信息:每帧调用方法来获取输入设备的当前状态并和与前一个状态相比较,如果需要。状态是用户输入设备交互的一个快照。在任何给定的时间,一种控制法中可能有很多按钮被按下,模拟手杆和引发被扳到一个方向上。这些按钮的当前位置和模拟控制在状态构造中都会报告出来。以下部分讲述获取和运用每一种输入设备状态的一些方法。 每种输入法都有其特殊的优点和缺点,下图就是它们优缺点的比较。 表3.1 输入方式优缺点比较表 输入设备 按键个数 模拟控制 震动效果 支持Windows 支持Xbox 360 系统允许数量 Xbox360 手柄 14 4 支持 支持 支持 4 键盘 > 100 0 不支持 支持 支持 1 鼠标 5 3 不支持 支持 不支持 1 Xbox 360提供了数字按钮和模拟手杆的良好组合,因此可以用它来玩许多类型的游戏。控制器既可用于Windows系统,也可用于Xbox 360系统。最多可以支持四个控制器。 有大量数字按钮的键盘,对于多功能的复杂模拟来说它是最好的,或者在输入文本时它是必须的,但是它没有任何模拟控制来实现精确移动。并不是所有键盘都支持Keys中所列按钮的全部范围,例如,早期的键盘可能不支持VolumeDown、 VolumeUp和VolumeMute成员。如果用户键盘是通过USB连接的,则可用于Windows系统或Xbox 360系统。 有精确模拟控制的鼠标是选择对象的最佳选择,比如在策略游戏中或移动视口,比如在第一人称的动作游戏中 ——但是鼠标没有数字按钮。现代鼠标除了标准左右按钮之外还有3个附加按钮:两个数字按钮,通常在鼠标侧面,还有一个数字按钮,按下滚轮可以激活它。滚轮本身就相当于在两个方向上的额外的模拟控制,但不能提供精确的控制。 并非所有的鼠标设备都支持所有按钮,例如,早期的鼠标设备可能不支持MiddleButton、XButton1 和 XButton2属性。 3.6 声音 XNA Framework提供使用Microsoft Cross-Platform Audio Creation Tool (XACT)和其相关的声音引擎的方法来实现音频重现。 Microsoft Cross-Platform Audio Tool,或XACT,是XNA Framework Audio API的核心。 它由强大的图形工具和API组合而成,图形工具用来创作音频内容,而API则用来解释已创建的XACT文件以及为响应游戏事件而播放音频文件。 使用简单音频重现的游戏用不到全部的XACT特性。 然而,XNA Framework只通过XACT文件来解释音频,所以即使是使用简单音频回放的游戏也必须用XACT。想了解如何创建一个简单的只包括少数wave文件的XACT项目,请参见如何使用XACT向游戏中添加声音。然后如果想知道如何从你生成的XACT工程中加载和播放cues, 请参见如何播放声音。 作为GUI驱动的音频内容创建系统,XACT能使音频设计器以组的方式来加载wave文件,将文件组织成离散的可以被游戏事件激活的“cues”,还能在“cues”之间创建过渡。XACT还能允许设计者定义变量,游戏中可以更改这些变量以更改音频设置。通过使用这些高级工具,音频设计者可以做很多事情,例如:为赛车游戏设计一组汽车发动机的声音,通过使用设计者所定义的这些变量来使发动机的声音的音量和音调增加或减小,这些变量都使由XACT引擎在游戏中控制的。 当你创建了一个XACT工程,并且将它保存为一个 .xap文件以后,就可以将这个.xap文件和所有这个XACT 工程使用到的wave文件输入到你的XNA游戏中,素材管道(Content Pipeline)将为你生成你在运
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服