




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验手册投石车大战 - 2d物理游戏lab version:1.0.0last updated:5/18/2021目录概述3练习 1: 带game state management的 xna 游戏框架的基本使用5任务 1 带game state management的基本游戏工程7任务 2 基本的游戏渲染19任务 3 游戏逻辑48练习 2: 游戏润色和菜单72任务 1 游戏润色 声音和动画73任务 2 增加 画面和菜单92总结104概述本次实验向你介绍在 windows phone 7上使用 windows xna game studio, windows phone 开发工具和microso
2、ft visual studio 2010进行游戏开发。在本次实验中,你将使用xna game studio构建一个简单的2维(2d)游戏来让你熟悉xna game studio开发过程中的基本概念。你还可以学习到如何使用带windows phone 7开发工具的visual studio 2010为windows phone 7操作系统设计和构建你自己的xna框架游戏。 目标 本次上机实验,你将有如下收获: 总体理解windows phone里xna game studio的应用模型 学会如何在你的游戏里使用资源 (图片,字体等) 学会如何添加游戏逻辑 学会 xna game studio里
3、的2d渲染 学会如何使用触摸和手势的输入来控制你的游戏先决条件以下是完成本次上机实验所必须的条件: microsoft visual studio 2010 或者microsoft visual c# express 2010, 还要有包括xna game studio 4.0 的windows phone 开发工具 构建为了方便起见,本次实验所使用的大部分代码都可以作为visual studio的代码段。要安装这些代码段:1. 执行sourcesetup文件夹下的 .vsi 安装程序。 注释: 如果你在执行代码片段的安装程序时遇到问题,你可以通过拷贝sourcesetupcodesnippe
4、ts文件夹下的所有.snippet文件到目录:my documentsvisual studio 2010code snippetsvisual c#my code snippets来进行手动安装代码段使用代码段通过代码段,你可以随时获取所有你想要的代码。本实验文档将会准确的告诉你什么时候使用它们。例如:图例 1使用 visual studio代码段把代码插入到你的工程里为了把代码段添加到visual studio中,你只需要把光标放在你想插入的代码上开始输入段的名字(没有空格和连字号),看到智能感知的段名,然后当你想要的段名被选中时,敲击tab键两次,代码将会被插入到光标的位置。图例 2开始
5、输入段名图例 3敲击 tab键来选中高亮的段图例 4再次敲击 tab键来展开段使用鼠标而不是键盘来插入代码段的方法,在你想插入代码段的地方点右键,选择my code snippets 下面的 insert snippet,然后从列表中挑选相关的代码段。想学习更多visual studio智能感知代码段,包括如何创建自己的代码段,请参考 /en-us/library/ms165392.aspx.任务本次上机实验包括两个练习:1. 带game state management的xna 游戏框架的基本使用2. 游戏润色和菜单本次实验完成需要: 90分钟
6、。练习 1: 带game state management的 xna 游戏框架的基本使用如果你曾经想制作你自己的游戏, microsoft xna game studio 4.0就是为你量身定做的。不管你是学生,游戏爱好者还是独立的游戏开发人员,你都可以通过xna game studio制作并分享伟大的游戏。xna game studio 4.0 是一款游戏开发产品,它基于microsoft visual studio 2010 并包括 windows phone 开发工具,为游戏开发者提供了强大而简单的 c# 编程语言和 .net 函数库。 xna game studio 4.0包括 xna
7、 框架好xna框架内容管道:xna 框架 应用编程接口的一个集合,即可以很大程度上简化游戏开发的普通任务,比如绘画渲染和时间控制,声音回放,输入处理和其他任务。xna 框架内容管道 为把3d模型,纹理图案,声音和其他资源导入到你的游戏提供了一种简单而灵活的方式。在本次实验中,你将为windows phone 7创建一个完整的xna框架游戏。你创建的游戏叫投石车大战,是windows phone 7上的一个单人游戏。在游戏中玩家和电脑各自控制一台投石车并试图摧毁对方的投石车。通过破坏对方投石车率先达到5分者获胜。 xna game studio游戏的基本方法有些游戏包括几个屏幕,每个屏幕代表一个
8、不同的级别,但是这个游戏只有一个游戏屏幕。你可以通过稍加修改游戏逻辑重用游戏屏幕来创建多个级别。一个游戏通常有3种状态:loading 系统加载资源,初始化游戏相关的变量并执行一些游戏开始之前必要的任务(这个状态在游戏的声明周期里通常只发生一次;更复杂的游戏可能会在级别或阶段之间分批加载作为玩家的进度)update 系统更新游戏世界的状态,包括计算活动物体的位置,更新它们的位置和动作,重新计算分数并执行一些其他有关的游戏逻辑;只要游戏引擎活着,这些更新就会定期发生。draw 系统在图像输出设备上绘制更新状态计算出的变化;只要游戏引擎活着,绘图就会定期发生。在xna框架中,update和draw
9、状态会在pc或xbox360上以每秒60次的速度发生,在 zune, zune hd, 或 windows phone 7设备上以每秒30次的速度发生。总体框架投石车大战游戏基于另一个代码样本,即 windows phone game state management (来源于/en-us/sample/phonegamestatemanagement), 为本次实验提供一些资源。这个游戏包括一下画面: 主菜单(mainmenuscreen 类) 操作指南画面 (instructionscreen 类) 玩游戏 (gameplayscreen 类)
10、暂停 (pausescreen 类) 在gameplayscreen 初始化的期间,游戏加载内容。当运行起来,游戏的第一个动作是加载和现实背景屏幕和主菜单。一旦主菜单加载完毕,菜单项就会显示在屏幕上,然后玩家才可以访问游戏我们从实现 gameplayscreen 类开始着手。我们将在接下来的练习中切换到其他画面。完整的游戏画面如 图例 5所示.图例 5投石车大战任务 1 带game state management的基本游戏工程在这个任务里,你将为windows phone 7平台创建一个xna框架游戏工程,并通过加入本实验提供的代码使工程具有game state management的能力1
11、. 启动visual studio 2010或者 visual c# 2010 express.2. 在file 菜单中,点击 new project.visual studio 2010: 在 file菜单中,选择 new 然后点击project.3. 在 new project对话框中,选择 xna game studio 4.0 类别并:a. 重安装的模板列表中,选择 windows phone game (4.0)b. 然后设置工程的名字为catapultgamec. 设置解决方案的名字为begind. 点击ok图例 6在microsoft visual studio 2010里创建一
12、个windows phone的游戏工程4. 在solution explorer里,检查windows phone应用模板产生的解决方案的结构。在visual studio里,解决方案包含相关工程的容器;在这个案例中,它包含为windows phone 7平台设计的一个名为catapultgame的xna game studio 4.0的工程和一个名为catapultgamecontent的相关游戏资源工程图例 7solution explorer 展示 catapultgame的应用注释: solution explorer 允许你在一个解决方案或工程里查看项目和执行项目管理任务。要打开 s
13、olution explorer, 请在 view 菜单中选择 other windows | solution explorer; 你也可以按 ctrl+w, s组合键。生成的工程包括一个默认的带基本xna框架游戏主循环的游戏实现。它位于game1.cs 文件里。5. 打开game1.cs文件并把默认的名称改成 “catapultgame.cs”。 6. 把主游戏类的名称 (默认是 game1)改为 catapultgame。要重命名,请右键点击类名,选择 refactor - rename图例 8重命名主游戏类7. 在 rename 对话框中的 new name 字段里输入 catapul
14、tgame然后点击 ok.图例 9为主游戏类起名8. 检查visual studio建议的更改,然后点击 apply。图例 10应用主游戏类的修改9. 重命名文件来匹配新的类名。在solution explorer里,右键点击game1.cs文件,把文件重命名为catapultgame.cs。图例 11重命名主游戏类文件一个 xna game studio 4.0的应用典型地利用了基本平台或其他库提供的服务。要使用这个功能,应用程序需要引用实现这些服务的相应函数库。10. 为了显示功能引用的函数库,在solution explorer里展开references节点并检查列表。列表包括常规的xn
15、a框架函数库和专门用于 windows phone 平台的函数库。图例 12solution explorer 展示工程引用的函数库注释: 目前,应用程序没做太多的事,但是为第一次测试运行做好了准备。在这步中,你创建应用,部署到 windows phone 模拟器上,然后执行它来理解典型开发的流程。11. 打开 view菜单,点击 output来打开 output窗口12. 在debug菜单中选择 build solution 或者按下 shift + f6 组合键来编译解决方案里的工程。visual studio 2010: 在build菜单中选择 build solution 或按下 ct
16、rl + shift + b 来编译解决方案里的工程。13. 观察 output 窗口并检查在过程中产生出的跟踪信息包括它输出结果的最终信息。图例 13在 visual studio里构建应用注释:在这个阶段,你应该看不到任何错误,但是如果工程包含编译错误,这些错误将会显示在 output窗口。 你可以利用error list 窗口来处理这些错误。这个窗口会以列表的形式显示编译器产生的错误,警告和信息,你可以根据错误的严重级别进行排序过滤。此外,你可以双击列表里的条目来自动地打开相关的源代码文件并追踪错误的原因。 14. 要想打开错误列表窗口,你只要在 view菜单中, 定位 other wi
17、ndows 并选择 error list. visual studio 2010: 在view菜单中选择error list,来打开错误列表窗口。图例 14错误列表窗口显示编译过程中产生的错误注释: 在这个阶段你不应该遇到任何错误。这一步只是简单解释如何访问 error list窗口。15. 确保在工具栏start debugging 按钮旁边的select device 下拉列表中选择windows phone 7 模拟器。图例 15选择目标设备来部署应用注释: 当你从visual studio中部署你的应用程序时,你可以选择部署到真实的设备上还是 windows phone 模拟器。16.
18、 在windows phone 模拟器中按 f5运行应用程序。注释:你会看到一个设备模拟器窗口,当visual studio搭建模拟器环境并部署程序时,它会处于暂停状态。一旦准备完毕,模拟器会展示开始界面,片刻之后,你的应用程序便会显示在模拟器窗口中。.应用程序将会显示一个不包括任何东西的简单蓝色界面。在这个初期阶段,对于一个应用程序来说是正常的。图例 16在 windows phone 模拟器中运行应用程序17. 在工具栏上点击 stop 按钮来拆卸调试器并结束调试会话。不要关闭模拟器窗口。你也可以按下 shift+f5来停止应用图例 17结束调试会话注释:开启一个调试会话,会在模拟环境搭建
19、和应用程序运行上花费一些时间。 为了简化调试体验,请不要在visual studio里处理源代码时关闭模拟器。一旦模拟器启动 ,它将会用很少的时间停止当前会话,编辑源代码,然后编译并部署一个新版的应用程序来启动一个新的调试会话。现在,我们最初的游戏可以运行了,也是我们向游戏里添加game state management功能的时候了。这将有助于在接下来的任务中向游戏添加屏幕和菜单。18. 在 solution explorer里,右键点击 catapultgame,然后选择 add 并点击 new folder。这一步是为game state management代码添加一个工程文件夹。图例
20、18添加一个新的工程文件夹19. 创建一个名为 screenmanager的文件夹。20. 选择 screenmanager 文件夹并将sourceassetscodescreenmanager 下面本实验安装文件夹里的所有文件添加进去。要添加已有的项目,在solution explorer 右键点击screenmanager ,然后选择 add 并点击 existing items,将出现一个文件选择对话框。图例 19向工程里添加已有的项目21. 沿着以前步骤规定的路径,选择所有文件,并点击 add 按钮。 图例 20向工程里添加 screenmanager 源文件注释: 实验安装文件夹下包
21、括所有游戏资源和样例代码,具体位置如下:lab_pathsourceassetscode 所有 csharp代码文件lab_pathsourceassetsmedia 所有图像,字体和声音注释: 这个步骤添加的代码实现了为创建xna game studio菜单和屏幕的windows phone game state management样本。我们建议你温习一下这个样例来加深理解。你可以在 /en-us/sample/phonegamestatemanagement找到完整的样例。注意,我们已经对本实验的代码进行了轻微地修改。22. 回顾solutio
22、n explorer,你的 solution explorer 视图应该如图例 21所示。图例 21在添加过 screenmanager文件夹和代码之后的solution explorer23. 再次编译解决方案;应该没有任何编译错误。 因为我们还没做任何明显修改,所以没必要再次执行应用程序。任务 2 基本的游戏渲染在以前的任务中奠定了添加屏幕的基础后,我们可以在游戏中添加最重要的画面游戏画面。本任务将向你介绍资源和screenmanager类的使用。这个任务的真正焦点向游戏里添加绝大多数初始渲染的代码。我们还会深入到必要的游戏逻辑并实现一些游戏类的基本版本。游戏使用资源(或素材)展现游戏或加
23、强游戏的体验性。资源有很多种:图片,纹理图案,声音等。本实验提供了一些这样的资源帮助你完成这个游戏的开发。1. 把实验资源添加到游戏资源工程中。 注释: 所有的资源都在sourceassetsmedia.下面实验安装文件夹中。虽然可以用以前任务中提到的技术添加资源,但是本实验的资源文件最好放在一个树形结构的目录中,这样有助于维护。2. 使用windows explorer 找到 screenmanager 文件夹,选择所有的三个文件夹并将它们拖拽到solution explorer 里的catapultgamecontent 工程节点中。图例 22向内容工程中添加资源文件夹注释: 拖拽操作是在
24、两个应用之间进行的。先是从windows explorer拖动,然后再放到visual studio的 catapultgamecontent 里面。可以有很多种方式创建资源并保存成多种不同的格式。在游戏开发过程中,这些资源往往会被频繁地修改。内容管道的宗旨就是帮助你吧这些素材轻松自动地添加到你的游戏中。一个正在制作小汽车模型的艺术家可以把作品文件添加到xna game studio游戏工程中,并分配模型名称。内容管道根据文件类型决定正确的模型导入器和内容处理器。如果有必要,你可以更改使用的导入器和处理器。 (关于导入器和内容处理器的进一步解释,请参考上的 “2
25、d asset types” )然后,想使用小汽车模型的开发人员可以简单地根据名称加载它。这种简单的流程让艺术家专注于素材的制作,让开发人员专注于素材的使用,而不需要花时间担心内容转换的问题。xna内容管道是你的xna game studio工程构建的一部分。你只需要添加资源到你的工程。当你编译它的时候,内容导入器会导入这些数据并转换成一个xnb(xna的二进制文件)。xnb文件是根据平台类型自动产生的。 虽然内置的内容导入器和处理器支持许多通常的文件类型,但是你可以开发并使用自定义的导入器和处理器;你还可以集成第三方的导入器和处理器来支持额外的素材类型。 一些标准的内容导入器支持一下文件类型
26、 (部分列表): autodesk fbx format (.fbx) directx effect file format (.fx) 字体描述的设置在一个 .spritefont 的文件里 图案文件的格式: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, 和.tga 游戏声音的设置在microsoft cross-platform audio creation tool (xact) format (.xap)或者在wave 文件格式(.wav)里3. 你的 solution explorer 应该与 图例 23 类似。error! refe
27、rence source not found.图例 23文件夹展开的内容工程4. 修改其中一个新添加资源文件的属性 :a. 在 catapultgamecontent下面展开texturesb. 展开 catapultsc. 选择animationdefs.xmld. 要查看文件的属性,请 右键点击它,选择 propertiese. 展开advanced 部分,把build action 属性修改成 none ,然后把 copy to output directory 属性改成 copy if newer我们之所以这样修改是因为我们不需要把这个文件编译并处理成另外一种格式。我们会直接解释执行它
28、。请参考 图例 24 和 图例 25所示。图例 24修改一个文件属性图例 25修改属性后的文件5. 现在是给我们的工程添加最初画面的时候了。在catapultgame工程里添加一个文件夹,命名为“screens”。你将用这个工程文件存储所有的游戏画面类。在开始实现游戏画面之前,让我们先回顾一下它的总体框架 。gameplayscreen 和game 类从技术上说,gameplayscreen类包含了游戏的更新和绘图逻辑。但是,gameplayscreen不能直接处理所有的工作,因为有些工作是相关游戏类负责的。 让我们回顾一下一些游戏类和它们的作用: player: player类代表参与游戏的
29、两个玩家,负责在屏幕上绘制每个玩家的投石车。player类的两个不同的子类代表了各自的玩家。human 类代表人类玩家并包括了处理输入和提供视觉反馈的额外逻辑;ai类代表电脑玩家并包括向人类玩家自动瞄准和发射的额外逻辑。 catapult: catapult 类囊括了游戏中其中一个投石车的所有绘图和逻辑。这个类跟踪和自己相关联的投石车的状态并根据状态赋予投石车生命。player和ai类都会用到此类。 projectile: 这个类代表其中一个投石车发射的炮弹。它负责渲染炮弹并更新炮弹位置,但是不负责决定炮弹是否击中物体,因为这是catapult类的工作。 animation: 显示动画的帮助类
30、 audiomanager: 播放声音的帮助类6. 向 catapultgame工程里添加一个名为”gameplayscreen”的新类 。要做到这一点:a. 右键点击 以前步骤中创建的 screens 文件夹b. 选择add c. 点击class:图例 26向工程中添加一个新类图例 27给新类起名7. 打开新类的文件,可以看到它只包含一些基本的使用声明和类定义。 8. 在文件顶部添加如下的使用声明。(代码段 使用xna进行2d游戏开发 gameplayscreen声明)c#using microsoft.xna.framework;using microsoft.xna.framework.
31、graphics;using microsoft.xna.framework.audio;using system.io.isolatedstorage;using system.io;using microsoft.xna.framework.input;using microsoft.xna.framework.input.touch;using gamestatemanagement;游戏画面的复杂性要求在代码前面添加许多声明语句。gameplayscreen类最终会播放声音,显示图像并对用户输入做出反应。9. 把新类改成 gamescreen 类的派生类 (gamescreen 类是在
32、我们以前添加到screenmanager文件夹中的类文件里定义的)。并且修改 catapultgame类定义之上的命名空间:c#namespace catapultgame class gameplayscreen : gamescreen 注释:从这里开始 ,创建的新类都要把命名空间改成 catapultgame。10. 在类中添加如下字段的定义。我们用这些字段为绘制画面和素材的位置来加载图案/字体 (虽然有些要在练习的尾声才会被用到):(代码段 使用xna进行2d游戏开发 gameplayscreen 字段)c#/ texture memberstexture2d foregroundte
33、xture;texture2d cloud1texture;texture2d cloud2texture;texture2d mountaintexture;texture2d skytexture;texture2d hudbackgroundtexture;texture2d ammotypetexture;texture2d windarrowtexture;texture2d defeattexture;texture2d victorytexture;spritefont hudfont;/ rendering membersvector2 cloud1position;vecto
34、r2 cloud2position;11. 创建一个名为 “loadassets”的方法。这个方法加载游戏画面的资源并初始化一些变量:(代码段 使用xna进行2d游戏开发 loadassets方法)c#public void loadassets() / load textures foregroundtexture = load(textures/backgrounds/gameplay_screen); cloud1texture = load(textures/backgrounds/cloud1); cloud2texture = load(textures/backgrounds/c
35、loud2); mountaintexture = load(textures/backgrounds/mountain); skytexture = load(textures/backgrounds/sky); defeattexture = load(textures/backgrounds/defeat); victorytexture = load(textures/backgrounds/victory); hudbackgroundtexture = load(textures/hud/hudbackground); windarrowtexture = load(texture
36、s/hud/windarrow); ammotypetexture = load(textures/hud/ammotype); / load font hudfont = load(fonts/hudfont); / define initial cloud position cloud1position = new vector2(224 - cloud1texture.width, 32); cloud2position = new vector2(64, 90);注释: gamescreen类定义了一些游戏核心功能来匹配练习前言里描述的3中状态: loadcontent, update
37、和 draw。 12. 重写父类的 loadcontent功能来调用loadassets 方法:(代码段 使用xna进行2d游戏开发 loadcontent 重写)c#public override void loadcontent() loadassets(); base.loadcontent();注释:你可能会问 我们为什么不简单地从以前重写的”loadasset”方法内部获取代码。原因是资源加载操作相当漫长。在接下来的联系中,我们将看到如何引入一个加载提示,以便游戏不会出现反应迟钝。为了这个目的,我们想使加载的资源独立于游戏画面的loadcontent的重写方法。13. 重写 draw
38、 方法,这样游戏画面可以自己在屏幕上绘图:(代码段 使用xna进行2d游戏开发 draw 重写)c#public override void draw(gametime gametime) float elapsedtime = (float)gametime.elapsedgametime.totalseconds; screenmanager.spritebatch.begin(); / render all parts of the screen drawbackground(); / drawcomputer(gametime); / drawplayer(gametime); / d
39、rawhud(); screenmanager.spritebatch.end();注释: 你会看到draw 方法使用几个帮助方法实现的,这些帮助方法绘制游戏的不同方面。目前,大多数的方法都被注释掉了;我们将会在后面的练习中进行处理。draw method方法gametime 参数包括了上次调用draw方法到现在的时间。.14. 添加 drawbackground 帮助方法,用于绘制各种各样的背景元素:(代码段 使用xna进行2d游戏开发 drawbackground 帮助方法)c#private void drawbackground() / clear the background scr
40、eenmanager.game.graphicsdevice.clear(color.white); / draw the sky screenmanager.spritebatch.draw(skytexture, vector2.zero, color.white); / draw cloud #1 screenmanager.spritebatch.draw(cloud1texture, cloud1position, color.white); / draw the mountain screenmanager.spritebatch.draw(mountaintexture, vec
41、tor2.zero, color.white); / draw cloud #2 screenmanager.spritebatch.draw(cloud2texture, cloud2position, color.white); / draw the castle, trees, and foreground screenmanager.spritebatch.draw(foregroundtexture, vector2.zero, color.white);注释:这段代码仅仅是把游戏背景图像绘制在屏幕上。代码中使用的spritebatch类来自于 microsoft.xna.frame
42、work.graphics 命名空间,用于在图像设备上绘图。它通过重用相似的渲染设置可以快速的绘制一批2d图像。现在玩家可以看到游戏画面了,但是我们必须首先把它和游戏的其他部分连接起来。为了完成这一点,我们再参看一下练习1中的一些代码。现在,我们可以使游戏画面可见了。为了这一点,我们必须修改catapultgame游戏类。 15. 在solution explorer里打开 catapultgame.cs 文件并删除catapultgame 类里的所有内容 (处了命名空间和声明外)。为了说清楚,请确保类的内容如下:c#public class catapultgame : game16. 在类
43、文件开头添加如下声明:c#using gamestatemanagement;17. 在类的开始,添加两个变量声明:(代码段 使用xna进行2d游戏开发 catapultgame fields)c#public class catapultgame : game graphicsdevicemanager graphics; screenmanager screenmanager;18. 现在在类里添加一个构造函数,把gameplay screen添加到 screen manager里: (代码段 使用xna进行2d游戏开发 catapultgame constructor)c#public
44、catapultgame() graphics = new graphicsdevicemanager(this); content.rootdirectory = content; / frame rate is 30 fps by default for windows phone. targetelapsedtime = timespan.fromticks(333333); /create a new instance of the screen manager screenmanager = new screenmanager(this); components.add(screen
45、manager); /switch to full screen for best game experience graphics.isfullscreen = true; / todo: start with menu screen screenmanager.addscreen(new gameplayscreen(), null); / audiomanager.initialize(this);注释: 在代码前面加上“todo” 标记的注释。在接下来的练习中,我们将在todo注释下面直接修改代码,从screenmanager.addscreen(new gameplayscreen(
46、), null)里加载初始画面改成加载菜单画面来作为初始画面。还要注意的是,构造函数里也包含一个注释掉的 “audiomanager” 类的初始化。我们将在后续的练习中进行处理. (去掉注释相关代码来初始它)。19. 编译工程并部署它。一旦游戏启动,你应该可以看到类似 图例 28的画面。图例 28先睹游戏画面注释: 在目前阶段,游戏画面有些空洞,所以接下来,我们为游戏添加题头显示。题头显示是游戏界面的一部分,向玩家显示重要信息,比如:当前得分。然而,我们还需要一些额外的变量来跟踪我们即将显示的信息。这是介绍一些游戏类封装信息的好时候。因此,我们首先的任务是创建player类的基础版本和它的两个
47、子类: human 和ai。20. 在catapultgame 工程下面创建名为players 的工程文件夹。21. 在players 工程文件夹下创建一个名为player 的类。22. 在新创建的类文件开头,添加如下声明:(代码段 使用xna进行2d游戏开发 player usings)c#using microsoft.xna.framework;using microsoft.xna.framework.graphics;23. 因为player最终会负责绘制与其相关的投石车,所以我们把它看作是一个可以绘制在屏幕上的游戏组件。修改player类,让它继承drawablegamecompo
48、nent类并采用内部继承,因为它最终会包含一些游戏内部的数据:c#internal class player : drawablegamecomponent注释: 记住把类的命名空间改成catapultgame。drawablegamecomponent 是一个游戏组件,当它需要绘制自身时会被通知。关于这个类更多的信息,请参考msdn的文章 (/en-us/library/microsoft.xna.framework.drawablegamecomponent.aspx).24. 在player类中添加如下变量声明:(代码段 使用xna进行2d
49、游戏开发 player fields)c#protected catapultgame curgame;protected spritebatch spritebatch;/ constants used for calculating shot strengthpublic const float minshotstrength = 150;public const float maxshotstrength = 400;/ public variables used by gameplay class/ todo enable this: public catapult catapult;
50、public int score;public string name;注释: 这些变量会给player类访问游戏对象和视觉输出类spritebatch的权限,而且允许它跟踪玩家的分数和名字。注意注释掉的变量catapult,他代表了和玩家关联的投石车。我们会在后面恢复catapult变量。同时还要注意两个常量的定义,我们会在后面用它们来执行一些与发射炮弹有关的计算。25. 为player类添加一套初始化的方法。其中的两个方法是构造函数,第三个是drawablegamecomponent 初始化方法的重写,它通常用于在显示之前加载组件所需的资源:(代码段 使用xna进行2d游戏开发 playe
51、r init methods)c#public player(game game) : base(game) curgame = (catapultgame)game;public player(game game, spritebatch screenspritebatch) : this(game) spritebatch = screenspritebatch;public override void initialize() score = 0; base.initialize();26. 在player工程文件夹下添加一个名为 human的新类27. 在新的类文件开头添加如下声明:(
52、代码段 使用xna进行2d游戏开发 human usings)c#using microsoft.xna.framework;using microsoft.xna.framework.graphics;using microsoft.xna.framework.input.touch;28. 修改human 类,使其继承 player 类:c#class human : player29. 在 human 类里添加下面的构造函数:(代码段 使用xna进行2d游戏开发 human constructors)c#public human(game game) : base(game)public
53、 human(game game, spritebatch screenspritebatch) : base(game, screenspritebatch) / todo: initialize catapult注释: 我们会在后面初始化玩家的投石车,把它作为第二个构造函数的一部分。.30. 在player工程文件夹下添加一个名为 ai的类。31. 在新的类文件顶部添加如下声明:(代码段 使用xna进行2d游戏开发 ai usings)c#using microsoft.xna.framework;using microsoft.xna.framework.graphics;32. 修改 ai 类,使其继承player 类:c#class ai : player33. 在ai类里添加如下构造函数:(代码段 使用xna进行2d游戏开发 ai constructors)c#public ai(game game) : base(game)public ai(game game, spritebatch screenspritebatch) : base(game, screenspritebatch) / todo:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永定区交通安全知识培训课件
- 水粉电线杆课件
- 消防设施电气线路敷设方案
- 建筑工程项目审计与资金控制方案
- 建筑项目施工阶段的突发情况应对预案
- 水禽基础知识培训课件
- 影响心脏泵血功能的因素66课件
- 幼儿依赖性行为的识别与应对学习指导张祯76课件
- 中药贮藏习题解析64课件
- 2025版节水型用水企业信用管理服务协议
- 伍德灯在寻找炎症性皮肤病变中的应用价值研究
- 新版药品管理法培训试题
- 合同的订立与有效性
- 梁的弯曲振动-振动力学课件
- 钢结构长廊施工方案
- 临床检验专业医疗质量控制指标(2015版)
- 信保业务自查问题统计表
- 2023年大学试题(大学选修课)-创业:道与术考试历年真摘选题含答案
- 心理健康评定量表
- 河道修防工高级工试题
- 女性生殖脏器
评论
0/150
提交评论