游戏开发论坛

 找回密码
 立即注册
搜索
查看: 19491|回复: 11

《XNA高级编程:Xbox 360和Windows》翻译系列

[复制链接]

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
发表于 2009-3-13 11:43:00 | 显示全部楼层 |阅读模式
前言


     直到最近,把Xbox 360当作一个平台来开发家用游戏才成为可能。对于大多数人来说,创建控制台游戏是绝对不可能的,不仅因为SDK很贵,还因为根本就得不到这样的SDK,或者没有任何的开发信息可以使用。

     这一切都已经改变了。微软新发布的XNA Framework使得开发家用跨平台(Windows和Xbox 360)游戏成为了可能。XNA不仅仅是一个新的框架,而且是现今最好的游戏开发框架,您不需要使用其他的语言或工具就可以轻松创建功能强大的游戏,当您看了本书中包含的所有游戏之后就会明白为什么我敢这么说。如果没有XNA,我不可能在这么短的时间内开发出一个像Racing Game这样好的游戏。

本书面向的读者

     本书面向的读者很广泛。首先您要对C#编程有所了解,如果您使用C++或者Java的话也可以轻松地转到这个开发语言。如果您之前没有任何高级编程语言的开发经验,我建议您先找一本好的C#教程看看。即使没有编程经验,本书还是为即将成为游戏编程人员的读者列举了很多提示和技巧。但是,为了更好地使用本书,您要理解所有的示例并进行实际的编码。本书大多数章节的组织编排顺序,无论是对初学者,还是有经验的人都是适用的。要写出成功的游戏,您所需要的就是乐意去学习本书介绍的游戏编程技术,以及探索电脑游戏世界并不断前进的欲望。

本书内容以及组织结构

     第一部分——“XNA Framework基础”,主要介绍XNA的基础,您将学习与XNA Framework和XNA Game Studio Express有关的一切。即使您已经知道了一些基础知识,第1章还是介绍了很多有用的提示和技巧。第2章介绍了您的第一个游戏的创作过程,虽然这个游戏很简单,但这里所学的东西对您后面的学习很有帮助。第3章和第4章将创建更多的游戏,不过更重要的是这里将创建您的游戏引擎的基础结构。

     借助第一部分创建的一些辅助类(helper class),在第二部分——“基本图像引擎”中写游戏引擎将非常容易,可以把重点集中在3D模型和Shader处理部分。因为XNA中的一切都是基于Shader的(因为没有固定的功能渲染-fixed function rendering),所以大部分时间都会在讨论Shader、正规映射(normal mapping)、屏幕特效(post-screen effects)等等。在第二部分的最后将介绍游戏Rocket Commander XNA,它融合了前面章节介绍的所有Shader以及游戏引擎。

     第三部分——“改进您的游戏引擎”,又返回到基础部分讨论声音、UI、用户输入处理以及用一种更好的方式管理您的游戏引擎。基于XNA图像引擎以及游戏Rocket Commander,您将创建一个新的游戏叫做“XNA Shooter”,它是一个非常好玩的老游戏,支持3D图像和高级Shader特效。

     第四部分——“写一个Racing Game”,您将使用学到的所有知识在XNA中创建一个竞速游戏。这一部分重点讨论一些高级主题,像landscape、3D track rendering、创建并处理物理引擎以及很多新的Shader技术,比如shadow mapping、detail mapping和使用最优化的方式来渲染以达到最佳性能。

     如果您已经准备好了开始学习XNA游戏开发,我建议您继续往下读并从第1章“XNA简介”开始。祝您好运能写出自己的第一个游戏,最重要的是要玩得开心!我希望您能享受到本书带给您的快乐,就像我写本书时享受到的一样。

源代码

     在您使用本书示例的时候,您可以把所有代码都手工输入一遍,或者下载本书附带的源代码。本书使用的所有源代码,包括在XNA中创建Racing Game的所有代码,可以在这个地方下载:http://www.wrox.com(译者注:本书的介绍页面是http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470126779.html)。当您进入站点以后,找到书的标题,在书的详细信息页面点击“Download Code”链接就可以获取本书的所有代码了。

     提示:由于很多书的标题都非常相像,您可以使用本书的ISBN号来快速查询,本书的ISBN是:978-0-470-12677-6。

     下载代码之后,使用您最喜欢的解压缩工具把它解压。另外,您也可以到Wrox的代码下载页面http://www.wrox.com/dynamic/books/download.aspx 查看本书以及其他所有Wrox图书的源代码。

勘误表

     尽管我们已经尽了各种努力来保证文章或代码不出现错误,但人无完人,错误还是会出现。如果您在我们的本书中发现了错误,像拼写错误或者代码错误,请反馈给我们,我们会非常感激。通过勘误表,可以让其他读者避免受挫,同时您也在帮助我们提供更高质量的信息。

     访问http://www.wrox.com,找到本书标题,在本书详细页面点击“Book Errata”链接,就可以进入本书的勘误表页面,在该页面中您将看到所有本书的勘误信息列表。

     如果在这个勘误列表中没有列出您发现的错误,可以访问www.wrox.com/contact/techsupport.shtml ,填写其中的表单把错误发给我们。我们会检查这些信息,如果核实的话,会把它添加到勘误列表页面,并在后续版本中修正这些错误。

P2p.Wrox.com

     P2P论坛是为作者和读者之间的交流而建立的,您可以到p2p.wrox.com加入P2P论坛。这个论坛是一个基于Web的系统,您可以在上面发布与Wrox出版的书籍或者与相关技术有关的信息,还可以和其他读者以及技术人员接触交流。它还提供了订阅功能,当有新内容发布的时候,它会通过Email的方式给您发送您感兴趣的话题。Wrox的作者、编辑以及其他业界专家,还有您的读者伙伴都会出现在这个论坛上。

     在http://p2p.wrox.com您会发现很多不同的版块都可以帮助您,不仅仅是帮助您阅读本书,还可以帮助您开发自己的应用程序。要加入该论坛,请按照下面的步骤进行:
          (1) 访问p2p.wrox.com 点击“注册(Register)”链接
          (2) 阅读用户使用条款(Terms Of Use),并点击“同意(Agree)”
          (3) 填写必要的注册信息以及您愿意提供的选填信息,并点击“提交(Submit)”
          (4) 您会收到一封Email来确认您的注册帐户并完成注册过程

提示:您可以在这个论坛中阅读信息而不必注册,但如果要发布您自己的信息,则必须注册并登录。

     加入论坛之后,您就可以发布新的信息,还可以回复其他人发布的信息,您可以随时访问站点获取信息。如果您想通过Email的方式获取某个版块的最新信息,可以订阅该版块。

     有关如何使用Wrox P2P的更多信息,可以查看P2P FAQs,而且可以了解和P2P和Wrox图书有关的常见问题。要查看FAQs,在每个P2P页面上点击“FAQ”链接即可。



来自:博客园

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
 楼主| 发表于 2009-3-13 11:49:00 | 显示全部楼层

《XNA高级编程:Xbox 360和Windows》1-1

第一部分 XNA Framework基础


第一章 XNA简介


     欢迎进入XNA的世界。作为一个游戏程序员,你大概了解一些DirectX的知识以及XNA Framework的基础。这一章主要介绍怎样安装XNA Game Studio Express以及如何有效地使用它,同时也包含很多对即使已经了解这些基础的人也非常有用的技巧。

     在接下来的几章中你将直接开始开发一些很酷的小游戏,这一部分主要包含一些基础知识的介绍,并设计一些在本书中将会用到的辅助类,为更高级的游戏项目开发一个图形引擎。为了简单起见,我们从第一部分的2D编程开始,然后再进阶到第二部分的3D编程。

     现在让我们开始XNA的精彩旅程吧!



1.1 XNA Framework入门



     XNA是由微软开发的,并在几年前就已经开始了,但对外一直都很保密,直到2004年的GDC(Game Developers Conference)大会上微软才第一次宣布XNA。XNA不仅仅是一个类似DirectX的开发框架,同时还包含很多有用的工具以及一个从Visual Studio衍生出来的集成开发环境(IDE),这些都将帮助游戏开发人员更容易地工作。在2006年XNA发布之前(从2004年到2006年),DirectX开发者只能在DirectX SDK的开发文档上方看到“XNA”标识,如图1-1所示(XNA意思就是“XNAs Not Acronymed”)。




图 1-1


     这就是说微软已经开发XNA Framework有一段时间了,但是开发者对它并不了解。XNA有可能是DirectX的继任者,但是在2005年底为Windows Vista平台而订制的Direct3D 10测试版发布了,这又表明对这样一个新的操作系统平台来说DirectX仍然是首选的图形框架。随后,在2006年的GDC大会上微软发布了XNA Build March 2006 CTP版本。XNA Build是一个允许你管理复杂构建过程的工具,很像Msbuild和Ants,但比它们更复杂、更强大。微软以开源的方式发布了一款游戏叫MechCommander 2,很多人下载了这款游戏并重新构建。但过了一段时间发现,一些中小规模的开发组实际上并不需要这样一款复杂的构建管理工具。

     之后,此事慢慢沉寂下来,只有微软自己以及DirectX MVP们(幸运的是我也是其中一员)开始接触并了解即将发布的XNA Framework和XNA Game Studio。而其他人直到8月由微软举办的Gamefest大会上才看到它们,微软在2006年8月30号宣布了XNA Game Studio Express Beta1。在第一款测试版本中,XNA只包含一个初学者工具包——“Space Wars”,此时还没有太多的3D功能。很多开发者和爱好者们开始体验XNA,并使用XNA中的Sprite类写了很多2D小游戏。虽然你可以很快地创建自己的Pong游戏克隆,或者是简单的射击游戏,但是却很难写自己的3D模型导入器以及渲染代码。

     最初,XNA Game Studio Express只是定位在初学者、爱好者和学生群体,帮助他们快速地创建自己的可以在Windows和Xbox 360平台上运行的游戏。但这并不是说专业的游戏开发工作室就不能使用XNA,不过专门面向专业的游戏开发工作室的XNA Game Studio专业版将在2007年的夏季发布(译者注:实际上并没有发布)。如果你想使用Visual Studio 2005专业版来开发XNA游戏,可以参照本章稍后将要介绍的技巧。

     令人高兴的是,几个月之后的2006年11月份微软又发布了另一款测试版,并在2006年12月发布了XNA Game Studio Express的最终正式版,该版本加入了内容管道(Content Pipeline)的内容和很多新特性,这些都将在第2章和第3章中介绍。

     XNA是完全免费的,并且第一次允许开发者同时为Windows和Xbox 360平台开发游戏。但是如果你想在Xbox 360控制台上运行你的游戏,你要加入“Creators Club”,并交纳99美元的年费。

XNA Game Studio Express

     图1-2是XNA Game Studio Express运行时的界面图,随后你将学习如何安装它。




图 1-2

     上图不仅仅看上去很像Visual C# 2005 Express,实际上就是它,只是如果创建XNA项目会对项目设置有一些小小的更改,同时在“工具-选项”中还有一个特殊的选项,允许你添加自己的Xbox 360设备并输入密钥。另外,在该IDE中还有一些新的特性,比如:内容管道可以帮助你快速地将texture、模型和shader导入到项目中。更多的新特性随后将一一介绍。

     XNA Game Studio Express是目前唯一一个可以使用XNA Framework来开发游戏的集成开发环境,不过微软将在2007年夏季或者稍晚些时候发布XNA Game Studio Professional版本,XNA Game Studio Professional 将基于Visual Studio 2005 Professional版本,并允许你使用所有Visual Studio的插件和特性。如果你有Visual Studio 2005并打算创建XNA项目,但Visual Studio 2005中并不包含相应的模板。更不幸的是,你也无法使用Visual Studio 2005打开在XNA Game Studio Express中创建的.csproj文件。继续往下读,你将在“使用Visual Studio 2005 Professional?”部分了解更多让Visual Studio 2005和XNA一起工作的技巧。

     微软还提到另一个XNA IDE版本叫做XNA Studio,这个版本基于Visual Studio Team System版本,并且定位在大型的游戏开发工作室。了解XNA Framework更多知识可以访问:http://msdn.microsoft.com/directx/xna/faq 。

应用程序模型

     本质上XNA Framework框架可以分为如图1-3所示的三个部分:



图1-3

     上图所列的DLL文件全部使用C# 编写,并且是完全的托管动态库,这也就是说你可以使用像Reflection(可以从http://www.aisto.com/roeder/dotnet 获得)这样的工具打开它们并查看它们是如何工作的 ,如图1-4所示。大部分内部函数只是调用DirectX的DLL,这也简化了操作。内容管道稍后将讨论。




图1-4

     每个XNA项目都使用一个Game类,它包含了所有重要的游戏组件,比如图形设备(Graphic Device)、窗口设置以及内容管理器,你还可以添加用户输入和声音处理,基本上你的游戏所做的每一件事情都由Game类来处理,或者由Game类中封装的其它组件来处理。

     下面是Game类中包含的最重要的三个方法(见图1-5)。在正式版本中,Game1.cs(该文件在你创建一个新的XNA项目时由系统自动生成)文件中还默认添加了两个辅助方法:LoadGraphicsContent和UnloadGraphicsContent,但这些方法在本书中不会用到,因为在Initialize函数中进行所有的初始化更容易。




图1-5


Initialize ( )
Update (GameTime time)
Draw (GameTime time)
     或许您已经猜到这些函数的功能了。Initialize方法用来加载所有的游戏内容,设置启动参数,初始化你需要的每一样东西。如果你想参考微软为XNA提供的设计模式,你可以把这些加载代码放到LoadGraphicsContent方法中。Update方法在游戏的每一帧重画之前被调用,来更新游戏时间、用户输入、声音以及其它任何在游戏屏幕上看不到的数据。如果你的游戏显卡功能有限的话,Update方法被调用的次数要比Draw方法多得多,本书中的所有例子都不用特别考虑Update方法和Draw方法的被调用次数,但无论如何你的更新代码(Update)要独立于重画代码(Draw)。最后,在重画每一帧的时候,Draw方法将被调用来把所有东西绘制到屏幕上。在单元测试的时候,Update方法和Draw方法之间的独立性并不总是那么重要,大多数时候都可以被忽略,但在最终发布的游戏中一定要确保游戏逻辑和重画代码保持独立。例如,在Windows平台上,用户可能按下Alt和Tab键,或者最小化游戏窗口,这种情况下Draw方法就不必再被调用,但游戏仍然会在后台继续运行,这一点对于要保持游戏者同步性的网络游戏来说尤其重要。

     另外,你也可以添加GameComponent类到你的Game类中,这些类也包含Update和Draw方法,这两个方法在Game的Update和Draw方法中被自动调用,而初始化在构造函数中直接进行。最初,微软想让开发者直接在Visual Studio的设计器中来创建或者添加游戏组件,这个功能在XNA Game Studio Express的第一个测试版中可以看到(2006年8月30号)。后来,由于设计器功能工作起来不是很好,Xbox 360平台也不支持,而且很多开发者也不用它,它就被去掉了。

     “游戏组件”这个想法主要是为了重用代码,以便在多个游戏之间进行共享,比如一个帧计数器(Frame Counter)或者一个sky cube mapping renderer for the 3D background。个人认为这有两个主要缺点:XNA本身并没有标准的游戏组件,而且开发者自己来写这样一个应用模型甚至对它进行扩展也不是很难。在本书中我不会过多地使用GameComponent这些类,不过你们可以在自己的游戏中随意使用,第四章将会详细介绍GameComponent类,以及它的优点和缺点。在Game类中包含一个Components属性,可以用它来很容易地添加更多组件。

     不过,不要误会我上面所说的,其实游戏组件想法本身其实是很棒的!在XNA第一个测试版发布的时候,微软的XNA Framework项目经理Mitch Walker做过一个网络讲座(webcast),来介绍游戏组件以及如何组合使用它们。最初,我对内容管道以及游戏组件这样的概念也并不是很明白,从网络讲座来看它们很酷,但是当我写自己的第一个XNA游戏时发现第一个测试版提供的设计器功能并不是非常有用。在第二个测试版以及最终的正式版中,很多最初的游戏组件代码以及XNA Game Studio中的图形设计器组件都被删除了。之所以这样,是因为微软找不到一个好的方法在Xbox 360控制台上来实现并应用设计器以及游戏组件的想法(这些以前只在Windows平台上可以正常工作)。这正好证实了我的第一感觉:游戏组件的概念并不是很有用,甚至在某些方面它会限制你的想法(第四章将会有详细介绍)。

     基本上每一个游戏都会实现自己的UI界面以及菜单逻辑。实际上仔细想想会发现,在 每一个应用程序中使用Windows的那些标准的菜单系统是一件很让人厌烦的事情,然而在每个游戏中都以一种全新的方式来创建新的菜单将是一个非常好的体验。而且如果你想创建新的游戏,你还可以很容易地提取出代码创建自己的游戏组件,这样你就可以重用这些代码(比如之前提到的SkyCubeMapping类)。有些游戏组件,比如第四章将要讲到的摄像机类(Camera)以及游戏屏幕图截取器类(Screenshot Capturer),都是非常好的组件示例,这些都可以在其他游戏中被重用,但本书中所涉及的游戏当中的其他东西都没有使用游戏组件的概念来实现。

     使用这种应用程序开发模型,微软希望游戏开发者团体能够很容易地创建并分享他们的游戏组件,同时促进XNA开发团体的不断进步。有关更多信息可以参考www.codeplex.com上的体验项目。

内容管道

     内容管道主要用来导入、编译和加载游戏资源,比如texture、3D模型、shader以及声音文件(如图1-6),它极大地减少了代码量,因为没有内容管道的帮助你要获取图形、3D数据以及shader这些数据都不得不自己编写代码。例如,如果你在项目中添加一个使用了两个texture和一个shader的模型文件,那么内容管道将处理这个模型文件并自动获取需要的texture和shader,内容管道会把这些数据编译成二进制形式,它帮你获取一切你想要的东西,而不需要你自己去做。




图1-6

     现在假设你添加到项目中的模型需要使用的shader包含一个错误。在过去,当你运行游戏的时候,会出现一个异常告诉你shader无法编译,游戏将终止。而现在,在程序Build 过程中shader就已经被编译了,你无需通过运行游戏来查看是否有错误,你可以根据XNA Game Studio Express提供给你的在构建过程中出现的错误消息很快地修复这些错误,然后再重新编译就可以了。

     内容管道并不仅仅包含一个DLL文件,总共包含如下五个DLL:

Microsoft.Xna.Framework.Content.Pipeline.dll 它包含了内容管道最基本的功能
Microsoft.Xna.Framework.Content.Pipeline.EffectImporter.dll 它用来编译和导入shader
Microsoft.Xna.Framework.Content.Pipeline.FBXImporter.dll 它是所有DLL中最大的一个,包含了大量的代码来导入 .fbx类型的3D模型文件,并且还支持很多其他特性,比如皮肤(Skinning)和骨骼(Bones)等
Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.dll 它主要用来导入texture文件,这些文件可以是dds文件(这是最好的纹理格式,并且支持硬件压缩),也可以是 .png .jpg .bmp .tga等格式文件,2D sprites也是texture并通常采用未压缩32位格式
Microsoft.Xna.Framework.Content.Pipeline.XImporter.dll 允许你导入 .x 3D模型文件,这是一种很多DirectX程序和示例都使用的格式
     在你编写游戏的过程中永远都不需要使用这些DLL,它们仅仅会在把数据构建并编译
到.xnb(XNA Binary)文件中才被使用。这样你就不必再去考虑这些游戏内容文件,当游戏运行的时候就已经可以确保所有内容文件都存在了。千万不要去修改.xnb文件,这些文件就像.exe类型的输出文件一样不可以直接修改,并且数据也不可以再被转换回texture、模型或者shader(虽然有可能这么做,但没有可以使用的工具)。而且,在Windows和Xbox 360平台上,即使游戏的源代码以及所使用的内容文件可能一样,但.xnb文件也会有很大的差别。

     另外,你也可以创建自己的内容处理器,把你拥有的其他任何类型的游戏资源(比如另一种格式的模型文件)编译到.xnb文件中。You explore that in Part II when you have to make sure all your 3D models have tangent data for the normal mapping shaders。

     好了,以上就是目前你要掌握的基础知识,是时候开始行动编写第一个游戏了。

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
 楼主| 发表于 2009-3-13 11:52:00 | 显示全部楼层

《XNA高级编程:Xbox 360和Windows》1-2

1.2免费获取XNA Game Studio Express

     要开始编写代码,您必须确保已经安装了一些工具,其中IDE是您快速开始的一个非常重要的工具。如果您已经安装并配置了XNA Game Studio Express开发环境,您可以跳过这一小节。这部分主要讲了一些提示和技巧,比如怎样在Visual Studio 2005 Professional版本中运行XNA。

系统需求

     在本书写作的时候XNA Game Studio Express只能运行在Windows XP SP2系统下(译者注:现在已经也可以运行在Windows Vista系统下,不过要安装相应的更新程序),之所以需要SP2 是因为.Net 2.0 Framework需要SP2这个条件。其他平台,比如Windows 2003 和Windows Vista也可以运行.Net 2.0,但目前却不受支持。XNA只在32位的平台上进行了测试,不过我在Windows XP x64以及Windows Vista 都测试过并运行很好,即使是作为开发平台。

     因为XNA Game Studio Express基于Visual C# Express,所以它和Visual C# Express 有相同的基本系统需求。Visual C# Express可以运行在Windows 2000 SP4、Windows XP SP2、Windows 2003 SP1、Windows XP x64和Windows Vista平台上,您可以看到,所用的系统越老,需要的补丁包也就越多。

     最后您还需要最新的DirectX Runtimes,如果您是认真对待游戏开发的话,建议安装完整的DirectX SDK。虽然DirectX SDK并不是必须的,但它包含了很多支持文档、游戏示例和指南,当您遇到问题时这些会有很大帮助。比如,DirectX SDK包含帮助您创建DDS纹理文件的工具,这种文件格式经过了最优化处理,是目前最好的图形显卡纹理格式。

     因为XNA和DirectX以及托管DirectX不再支持固定管道功能(Fixed Function Pipeline),所以您还需要一块至少支持Shader Model 1.1的显卡,当然能支持Shader Model 2.0更好。第一块支持Shader的显卡出现在2001年(GeForce 3和ATI 7000),支持Shader Model 2.0的下一代显卡出现在2003年(GeForce 5x和ATI 9x00 Series),并且在2004年很多游戏都利用了Shader技术,比如Far Cry,DOOM 3,Half-Life 2等。Shader Model 3.0(GeForce 6x和ATI x1000 Series)是今天的标准,在2006年晚些时候或者2007年早些时候会出现支持Shader Model 4.0(GeForce 8x)的新的显卡。Xbox 360使用的是Shader Model 3.0的扩展版本。

     所以以下所列的就是安装XNA Game Studio Express的最低配置要求:

Windows XP SP2或者Windows Vista
512M内存,当然越多越好
1GHz CPU,当然越快越好
支持Shader Model 1.1的显卡(Nvidia GeForce 3或4,ATI Radeon 7x),当然支持Shader Model 2.0的更好
安装

     在这个地址可以免费获得XNA Game Studio Express的最新版本:http://msdn2.microsoft.com/en-us/xna/default.aspx (译者注:目前这个地址已经可以下载到正式版,而本书使用的是测试版)。

     测试版要求在安装XNA Game Studio Express之前必须先安装Visual C# Express以及最新版本的DirectX 9.0c(译者注:正式版的要求和这个一样),所有这些都是免费的,这就会让很多人,尤其是学生、狂热爱好者以及普通的游戏玩家来体验这样的开发环境,并且有可能让他们比以前对游戏开发更加感兴趣。

     如果您想一步一步地学习安装过程,并且想看看我是怎么安装的,可以看看我录制的一段视频指南,在这里可以查看:http://www.xnaracinggame.com 。

     开始安装XNA Game Studio Express(如图1-7,译者注:该图是XNA Game Studio Express的最新版本的安装界面,而不是原书中使用的测试版),安装过程没有特别的选项操作,安装程序会自己进行一切操作(例如,它还会为Xbox 360测试安装防火墙规则),另外还会添加XNA帮助文档、初学者工具包以及项目模板。




如图1-7

     虽然DirectX SDK不是必须的,但仍然建议安装,可以在这里下载DirectX SDK:
http://www.microsoft.com/downloads/Browse.aspx?displaylang=en&categoryid=2 安装之后可以打开DirectX示例浏览窗口来查看DirectX的最新特性,如果之前没有接触过托管DirectX并且很感兴趣,可以查看帮助文档和指南。

     如果要在Windows系统中使用Xbox 360控制器,可以把它插入您机器的USB口,安装必需的驱动程序之后就应该可以正常工作了。如果不能正常工作,您可以自己下载驱动程序,并查看这里的官方指导:http://www.microsoft.com/hardware/gaming/download.mspx 。

     在本书中您还会做很多单元测试的工作,我推荐使用NUint和TestDriven.Net,不过NUnit 是外部的DLL,而且TestDriven.Net还不支持Express版本,稍后您会使用一个特殊的类来实现自己的单元测试工具。

     如果您使用的是Visual Studio 2005,我建议使用TestDriven.Net,如果您使用的是Visual Studio Team System,可以使用VS自带的单元测试工具。另外还有其他的单元测试框架可供选择,比如:MbUnit、csUint等等。本书中的示例都会非常简单,只使用了单元测试的最基本的特性。

     您可以在XNA Game Studio Express集成开发环境中做一切您要做的工作,而且微软也鼓励这么做。本书中的所有示例在Express版本中都可以正常工作,同时我也没有使用任何外部的DLL文件(这也是XNA初学者工具包的要求之一)。当然,有些人已经安装了Visual Studio 2005并且感觉在这个环境下开发更舒适,接下来我将介绍几个技巧,让XNA在Visual Studio 2005 Professional版本中也能工作。

使用Visual Studio 2005 Professional ?

     XNA Game Studio Express是一个很好的开发环境,但是如果您更习惯于这样的工作环境:带有像SourceSafe或者其他任何CMS(Content Management System)工具,以及像CodeRush、TestDriven.Net等更有效率的工具插件,那么您会遇到一连串的问题,就像我之前所说的您甚至无法使用Visual Studio 2005打开XNA项目。

     XNA Framework要使用.Net2.0 Framework和DirectX 9.0c,这就是说要在任何Windows环境下运行游戏,必须需要.Net2.0 Framework、DirectX 9.0c以及XNA DLLs。所以在Visual Studio 2005的环境下,安装DirectX SDK之后,您还需要如下两个文件来编译、运行XNA应用程序:

Microsoft.Xna.Framework.dll
Microsoft.Xna.Framework.Game.dll
     这两个文件在所有的XNA项目中都要被引用,所以把它们添加到Visual Studio 2005的项目中就可以开始编码了,作为开始的训练您可以把使用XNA Game Studio Express创建的空XNA项目中的产生的Game1.cs和Program.cs文件复制过去使用。

     如果您在64位操作系统中进行开发,比如Windows XP x64或者Windows Vista x64,又会出现另一个问题。虽然DirectX 9.0c包含64位的DLL文件,.Net Framework在64位平台上也可以很好地工作,但XNA Framework却只有32位的版本(也叫x86平台),以前在Windows的64位操作系统中使用托管DirectX(Managed DirectX)也会遇到同样的问题,因为它也有32位的版本。使用64位的操作系统并不意味着无法使用32位的应用程序,正相反,现今几乎所有的应用程序都是为32位操作系统编写的,但它们在Windows XP x64和Windows Vista x64平台的32位模式中也能很好地运行。

     既然在64位操作系统中可以运行32位和64位的应用程序,那我为什么又要提出上面的这个问题?原因是一个Windows进程只能运行于32位或者64位其中之一的环境下,而且在64平台下模仿32位的模式执行会很慢甚至可能根本不支持。那么如何在64位环境下让XNA正常工作呢?这个根本不可能,因为目前还不支持。不过,您可以确保让.Net Framework和应用程序在32位模式下运行,Windows就会将整个进程设置在32位模式下,这样就可以让XNA DLLs正常工作,否则您的游戏在任何64位平台上甚至都无法启动。

     在Visual Studio 2005中可以把项目属性中的目标平台从“Any CPU”调整为“x86”,而在XNA Game Studio Express中没有该选项,不过可以在.csproj文件的PropertyGroup节中添加如下代码:

     另外我还写了一个小工具,可以把项目在XNA Game Studio Express和Visual Studio 2005之间相互转换,可以在我的Blog上下载:http://abi.exdream.com 。

配置您的Xbox 360

     要把Xbox 360连接到您的个人电脑上,您必须先通过Xbox Live Service在Xbox 360上安装XNA Framework。和Windows平台不同的是,Xbox 360上的XNA Framework并不是免费的,您必须要加入“Creator’s Club”,并且还要交纳99美元/年或者49美元/4个月的费用。微软这么做是想对开发人员有所控制,控制台开发通常很封闭,根本没有像Windows和Linux平台中的开源的概念,希望这在将来会有所改观。

     首先确保您的个人电脑和Xbox 360连接在同一个网络中,您不必直接把Xbox 360连接到您的个人电脑,只要在同一网络中即可(通过路由器或调制解调器)。您要确保始终可以通过控制台连接到Internet,而不仅仅是连接到您的个人电脑,因为XNA必须在线连接到您的Xbox控制台。当XNA Framework在您的Xbox 360上安装之后(同时还会安装.NET 2.0 Compact Framework的一个修改版本),您就可以打开XNA Game的管理界面了,如图1-8所示:




如图1-8

     在上面的管理界面中您可以打开自己的游戏项目,也可以从网络上或朋友那里复制一份到您的控制台。在连接到您的个人电脑之前,您要在“设置-创建密钥”工具中生成一个密钥,然后在个人电脑中打开XNA Game Studio Express,在“工具-选项”中添加您的Xbox 360设备,此时会要求输入之前产生的密钥,如图1-9所示:




图1-9

     现在您就可以创建Xbox360项目并部署到您的控制台,这些都可以通过XNA Studio来完成。如果使用F5进行调试,同样会部署到控制台,并且可以直接在控制台上进行调试,您一边在个人电脑上一步一步地调试,一边就可以在Xbox 360上看到运行的结果,这是不是很酷呢?

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
 楼主| 发表于 2009-3-13 11:58:00 | 显示全部楼层

《XNA高级编程:Xbox 360和Windows》1-3

1.3从头开始

     您已经准备好了一切,现在就让我们开始编码吧!本节您将在XNA Studio模板的帮助下创建一个简单的游戏项目,然后在Update和Draw方法中添加少量代码以实现一些小功能。在下一小节学习了SpriteBatch类之后,您将创建您的第一个游戏。

您的第一个项目

     打开XNA Game Studio Express,在菜单栏中选择“文件→新建项目”,在弹出的新窗口中选择“Windows Game”模板,然后在项目名称处输入新项目的名称,比如“HelloWorld”或者就使用默认的名称“WindowsGame1”,在位置处输入新项目的保存位置,最后点击“确定”按钮。另外,在该窗口中还可以创建基于初学者工具包的游戏项目,比如“Spacewar Windows Starter Kit”。如下图1-10所示:




图1-10

     在新创建的项目中包含两个类文件:Game1.cs和Program.cs。其中Program.cs文件包含了该应用程序的入口点Main方法,如下所示:

static void Main(string[] args)
{
     using (Game1 game = new Game1())
     {
          game.Run();
     }
}
     Game1.cs文件包含了类Game1(继承自类Microsoft.Xna.Framework.Game),它包含了之前讲过的三个方法:Initialize、Update和Draw。Initialize方法此时不执行任何操作,只是调用基类的Initialize方法进行基本的初始化操作。Update方法主要包含下面的几行代码,用来检查Gamepad上的“Back”按钮是否被按下,如果按下则退出游戏,否则调用基类的Update方法:

// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
   this.Exit();
     Draw方法主要执行一个操作,将游戏窗口的背景色设置成一个特定的颜色,如下所示:

graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
     现在按下键盘上的F5键,或者选择菜单栏上的“调试→启动调试”命令运行游戏,此时将弹出如图1-11-(1)所示的窗口,它的了蓝色背景就是在Draw方法中设置的。




图1-11-(1)

     您也可以把背景色改为绿色,比如Color.Green,然后再按F5运行程序,可以得到如图1-11-(2)所示的窗口,代码如下:

graphics.GraphicsDevice.Clear(Color.Green);



图1-11-(2)

GraphicsDevice的Clear方法还有其他几个重载版本,可以用来设置Depth和Stencil缓存参数,如果只设置颜色值这两个参数将自动设置为默认值,稍后您会用到只设置Depth缓存,而不用设置背景色参数,您只需要写下面这样的代码即可:

graphics.GraphicsDevice.Clear(ClearOptions.DepthBuffer, Color.Green, 1, 0);
参数ClearOptions的默认值是ClearOptions.Target | ClearOptions.DepthBuffer,意思是背景色和Depth缓存都被清除。

修改代码

     现在,您可以想一想如何修改您的代码来实现一些操作。比如,按下键盘上的Escape键可以退出游戏。之前说过,XNA默认的会在Update方法中检查Xbox 360控制器上的Back按钮是否被按下来决定是否退出游戏,代码如下:

// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
   this.Exit();
     在“第三章-辅助类”中您将学习到Input类的使用,不过现在您可以使用一种快速的方法来操作键盘,下面的代码演示了当您按下Escape键时也能退出程序:

// Get current gamepad and keyboard states
GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
KeyboardState keyboard = Keyboard.GetState();
// Back or Escape exits our game on Xbox 360 and Windows
if (gamePad.Buttons.Back == ButtonState.Pressed ||
    keyboard.IsKeyDown(Keys.Escape))
{
   this.Exit();
}
     第二章将详细讨论Sprites的知识,不过现在您可以稍微提前一点来学习在游戏中加载图像:给游戏加上一个背景图,然后操作键盘或者GamePad来移动该背景图,就像在一个竞速游戏或者Tile引擎中的一样,这些在很多2D的角色扮演游戏中经常会用到。对于更加复杂的Tile引擎,您还会需要石头、草、水、泥土等texture,甚至在草和水之间加一些过渡纹理(Transition Textures)。这将需要更多的texture和自定义代码,不过这也不是很难,如果您真的对Tile引擎感兴趣,您在网络上可以找到很多相关的信息。

     在您的第一个项目中添加的texture如图1-12所示:




图1-12

要把这个texture(CityGroundSmall.jpg)加入到您的项目中,只需要在解决方案资源管理器(Solution Explorer)中把它拖拽到您的项目中即可,然后右键点击该文件查看“属性”,如图1-13-(1)所示:




图1-13-(1)

通常您可能只会看到一些“生成操作(Build Action)”和“复制到输出目录”的选项(比如,您可能想把一个.dll或者.xml文件包含进来)。但如果XNA Studio检测到受支持的内容文件格式,您还会看到一些高级属性,此时会有另外三个重要设置:资源名称(Asset Name)、内容导入器(Content Importer)、内容处理器(Content Processor)。其中资源名称在将来选择加载资源时使用,而且内容文件的资源名称必须是唯一的,不能有重复。对于内容导入器,您可以像图1-13-(1)所示的情况中选择“Texture-XNA Framework”,或者为.x类型的文件选择“模型导入器(Model Importer)”,或者为.fx类型的文件选择“特效导入器(Effect Importer)”,如图1-13-(2)所示。




图1-13-(2)

     内容处理器则包含更多的选项,比如,为这里的texture(CityGroundSmall.jpg)可以选择“Texture (Sprite, 32bpp) - XNA Framework”或者“Texture (Model, DXT, mipmapped) - XNA Framework”。DXT是一种压缩格式,在dds类型的文件中也经常使用,而且在游戏中这种格式用于texture效果非常好,因为它的压缩比高达1:6(如果包含透明像素则是1:4),这意味着在硬盘和显卡内存中的相同大小的空间上您可以存放多达 6倍数量的texture。对于2D sprite通常最好不要进行压缩,因为查看它们实际尺寸的时候使用32bpp(bits per pixel)可以保证最好的质量。关于内容管道的内容在本部分随后将会讲到。

     现在如果您按下F5或者F6(生成解决方案)上述添加的texture将被处理,并在项目的输出文件夹中产生一个新的文件“CityGroundSmall.xnb”,而且在项目的输出窗口中会显示下面的信息:

Building CityGroundSmall.jpg -> bin\x86\Debug\CityGroundSmall.xnb

     现在您要做的最后一件事就是加载已经导入的纹理文件,在Initialize方法中进行操作并且在类中添加一个变量backgroundTexture,并使用之前您指定的资源名称(Asset Name)(资源名称默认的是您添加的内容文件的名称)。要渲染您的texture到输出屏幕上,您需要下一章要讨论的SpriteBatch类,它先设置Alpha Blending,然后把texture画到sprite中,最后把所有东西都画到屏幕上,代码如下:

private Texture2D backgroundTexture;
private SpriteBatch sprites;
protected override void Initialize()
{
   this.backgroundTexture = this.content.Load<Texture2D>("CityGroundSmall");
   this.sprites = new SpriteBatch(this.graphics.GraphicsDevice);
   base.Initialize();
}
     要显示背景您必须在Draw方法中启动SpriteBatch,并把texture渲染到sprites中:

protected override void Draw(GameTime gameTime)
{
   this.graphics.GraphicsDevice.Clear(Color.Green);
   this.sprites.Begin();
   this.sprites.Draw(this.backgroundTexture, Vector2.Zero, Color.White);
   this.sprites.End();

   base.Draw(gameTime);
}
上述代码将在您的输出屏幕的(0,0)坐标处显示该背景,SpriteBatch.Draw方法中的Color参数也可以重新设置,不过这里暂时并不重要。按下F5您将看到图1-14所示的结果:




图1-14

     为您的项目做的最后一件事就是添加使用键盘或者GamePad来滚动背景的功能,这样您就可以把可滚动的Tile渲染到整个背景。像下面这样修改Update方法您将可以捕获键盘或者GamePad输入:

protected override void Update(GameTime gameTime)
{
    // Get current gamepad and keyboard states
    GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
    KeyboardState keyboard = Keyboard.GetState();
    // Back or Escape exits our game on Xbox 360 and Windows
    if (gamePad.Buttons.Back == ButtonState.Pressed ||
        keyboard.IsKeyDown(Keys.Escape))
    {
        this.Exit();
    }
    // Move 400 pixels each second
    float moveFactorPerSecond = 400 *       (float)gameTime.ElapsedRealTime.TotalMilliseconds / 1000.0f;
    // Move up and down if we press the cursor or gamepad keys.
    if (gamePad.DPad.Up == ButtonState.Pressed ||
        keyboard.IsKeyDown(Keys.Up))
     {
         this.scrollPosition += moveFactorPerSecond;
     }
     if (gamePad.DPad.Down == ButtonState.Pressed ||
         keyboard.IsKeyDown(Keys.Down))
     {
         this.scrollPosition -= moveFactorPerSecond;
     }
     base.Update(gameTime);
}
前面几行代码和之前的例子是相同的。接下来要计算每一帧要移动多少像素,如果一秒钟只画一帧,那么变量moveFactorPerSecond的值就是400;如果一秒钟画60帧,那么一帧需要1/60秒,此时该变量的值就是400/60(其中gameTime.ElapsedRealTime表示相邻两帧之间的时间间隔)。Because you use floats here instead of just integers you can have a couple of thousand frames and the movement is still 400 pixels per second if you press up or down。

     每当用户按下Up或者Down键的时候变量scrollPosition的值都会发生变化,此时在Draw方法中把scrollPosition的值加到坐标y上,就可以把背景来回上下移动了,代码如下:

protected override void Draw(GameTime gameTime)
{
    this.graphics.GraphicsDevice.Clear(Color.Green);
    this.sprites.Begin();
    int resolutionWidth = this.graphics.GraphicsDevice.Viewport.Width;
    int resolutionHeight = this.graphics.GraphicsDevice.Viewport.Height;
    for (int x = 0; x <= resolutionWidth / this.backgroundTexture.Width; x++)
    {
       for (int y = -1; y <= resolutionHeight / this.backgroundTexture.Height; y++)
       {
           Vector2 position = new Vector2(
                x * this.backgroundTexture.Width,
                y * this.backgroundTexture.Height +
                ((int)this.scrollPosition) % this.backgroundTexture.Height);
           this.sprites.Draw(this.backgroundTexture, position, Color.White);
       }
    }
    this.sprites.End();
    base.Draw(gameTime);
}
     现在运行您的游戏就可以上下来回移动,这对于您的第一个小应用是不是很酷?

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
 楼主| 发表于 2009-3-13 15:00:00 | 显示全部楼层

《XNA高级编程:Xbox 360和Windows》1-4

1.4 XNA相关

     在结束这一章之前,还有一些关于XNA Framework和XNA Game Studio Express的提示和技巧。如您所见,虽然您现在可以进行编码了而且程序工作得也很棒,但是当您遇到了难题或者不知道怎么解决一个特定的问题时,在您的浏览器上拥有一些书签可以去查找还是很有必要的。另外,本节将讨论一些.Net和C# 的优点以及XNA和托管DirectX之间的区别。

重要链接

     您可以把下面的一些链接加入您的书签中:

http://msdn.microsoft.com/directx/xna 微软MSDN上的XNA开发中心,里面有XNA Game Studio论坛和XNA Framework论坛,这些是您在网络上可以找到的最活跃的XNA论坛,您还可以在这里下载XNA的最新版本,浏览问题及解答,以及最新信息。
http://en.wikipedia.org/wiki/Microsoft_XNA  Wikipedia上的XNA,这里的内容更新很快,包含很多其它主题的链接,在页面的底部列了一些有用的外部链接。
http://xnadevelopment.com  这是一个新站点,里面有很多链接、学习指南以及技巧来帮助您在XNA的世界中从头开始学习。
http://xnaresources.com  这也是一个新站点,里面有很多新闻,一些非常有用的关于Tile引擎的学习指南,以及很多您可能会感兴趣的游戏组件。
http://learnxna.com  Blog形式的XNA新闻站点,包含很多视频学习指南,主要关注XNA的学习以及绘图工具的使用技巧。
http://abi.exdream.com  本书作者的官方站点,在这里您可以找到更多我制作的游戏,像XNA Rocket Commander、XNA Shooter,还有本书中的XNA Racing Game,以及很多介绍它们的文档和视频指南。另外,我建议去看看Rocket Commander的介绍视频,它在Coding4Fun上非常受欢迎。
C#适合开发游戏吗?

     在类似www.GameDev.net这样的站点上经常有帖子讨论C++和C#之间的区别,通常讨论讨论就演变成了语言之间的战争。回到.Net诞生的初期(2002年)我也参与了很多类似的讨论,但是郁闷的是当时几乎99.9%的人都站在C++的一边,根本没有任何方式来说服任何人,因为他们根本不理你。语言之战针对的并不是把C#作为一门开发,而是使用C#来开发游戏,因为C#和Java都是托管语言并且它们看起来极像,而Java尝试作为游戏开发平台失败了(除了作为手机游戏开发平台)。这和之前C取代汇编(Assembler)、C++取代C的语言之战很像,即使到了Bjarne Stroustrup发明C++语言已经20多年后的今天,一些游戏开发者仍然使用C而没有真正充分利用C++的优点,如果您看看一些著名的游戏引擎(像Quake和Half-Life)的源代码,您会发现它们更像是C而不是C++。

     这在游戏编程世界是一件非常奇怪的事情,人们都害怕在转换到新的语言平台之后会有很多性能损失,而且可能会失去旧有的基础代码或者做很多工作把它们转换到新的语言平台。尽管如此,游戏开发人员会很快地采用新技术和脚本语言,而且总是在最新的硬件上进行开发。支持Shader Model 4的显卡还有一年的时间才会出现,但我们这些游戏开发者们却在尝试Direct3D 10了,即使没有相配套的硬件来运行。

     在2001年底尝试了.Net和C#的测试版本之后,我很快就在2002年初采用了这套平台。我以一个新的游戏引擎作为开始,我们的工作小组也开始了一个新项目。在.Net的初期除了一些简单的2D游戏,几乎没有一个图形引擎可用,这使得在C#直接中使用OpenGL或者DirectX非常困难,必须要频繁地调用非托管的DLL,还要处理很多令人厌烦的指针逻辑,而且这些还必须得在C# 的非安全模式(Unsafe Mode)下进行。2003年微软终于发布了托管DirectX的第一个测试版本,这使得在.Net环境下开发新的DirectX应用成为了可能,而且使用托管的DirectX比使用原始的DirectX在性能上的损失只有1%-2%,仔细想想这并不是很重要(仅仅是CPU多做了一点点工作而已)。

     但这并不是说游戏开发者都会转向C#,即使在我2004年发布了第一款基于.Net平台的商业游戏“Arena Wars”之后大家仍然持怀疑态度。然后又过了一年才开始有越来越多的开发者开始尝试.Net平台,尤其是学生和初学者都非常喜欢C#的简易性,更多的人开始使用.Net平台来开发游戏。但是C++和C#之间的讨论仍然存在,讨论的焦点也还是一样,只是现在双方的阵营已经趋于平衡了(很早之前我就已经不在看那些主题中包含“VS”字样的帖子,因为一遍遍地看这些相同的争论简直就是浪费时间)。

     当您碰到那些告诉您C#只适合新手,C++更高级时,要谨记上面所说的。同样的事情在多年前也发生在汇编和C++身上,将来也一定会有新的语言让我们的工作更容易,也还会有很多人犹豫是否要立即采用它们。大多数大型的游戏工作室不能立即采用每一项新技术,他们或许正处在某个大项目的开发过程中,而且他们有太多的基础代码不能很容易地进行转换。不过,从长远来看,代码始终要被转换,我们也会更多地采用高级语言。

     图1-15是我做的一张图片来表示C++中的DirectX和C#中的托管DirectX的区别。正如您所看到的,MDX(Managed DirectX)代码量只有非托管代码量的一半多。在XNA中代码量甚至会更少,而且更加容易地来导入texture并把它们呈现在屏幕上,不过XNA和MDX之间的比较会比较困难,因为它们的概念是不一样的。




图1-15

习惯内容管道

     正如在您的第一个XNA项目中看到的,在XNA Studio中向游戏项目中拖拽添加一个texture是非常容易的。虽然把所有的游戏内容都放到一个地方并且直接和代码在一起很不错,但是,我所见过的大多数项目都不会直接把诸如texture、模型和shader内容放到Visual Studio的项目中,原因是直接手动复制这些文件并让游戏直接加载它们更容易。默认的Visual Studio不会复制任何内容文件到输出文件夹,您必须手动设置内容文件属性中的“生成操作(Build Action)”,把它从“无(None)”设置为“内容(Content)”,并且还要设置“复制到输出目录(Copy to Output Directory)”,把它设置为“如果较新则复制(Copy if Newer)”。这的确是一个麻烦事,不过XNA已经让这个操作更加容易了。

     您或许会问为什么要改变之前载入texture的方式。如果想让您的游戏运行在Windows平台上,您可以动态地加载texture和shader而无需先把它们作为内容文件导入项目中,这样做的好处是您可以在游戏运行的时候改变texture和shader(XNA的内容管道不支持这一特性)。但是对于模型文件(Model Files)这样却行不通,因为除了使用ContentManager类(它只加载编译过的.xnb内容文件)中的加载方法之外没有其它的方法可用。

     在Xbox 360平台上只能加载内容文件,不支持直接加载texture和shader。如果您用了直接加载texture和shader,那必须得把这些代码从Xbox 360平台上排除掉,Xbox的DLL文件不支持加载除了内容文件的其它任何东西。

     有关更多关于模型文件的详细内容,请参考本书第二部分的相关章节,这个话题并不像使用texture那么简单。所以,本部分只讲sprite和2D texture处理,这样会使事情更加简单。对于简单的2D游戏这些的确很不错并且也很容易,不过要做一个专业点的游戏,您需要3D模型和很多非常酷的Shader特效。我还建议您找一个专门的设计人员为来做texture和3D模型,因为这是一个非常复杂的话题,您一个人做所有事情会浪费很多时间,而其他人可能更善于做texture和3D模型,要好好利用您写代码的特长而让其他人去做画面。如果没有设计人员可用,您可以使用本书中的以及XNA初学者工具包中的模型和texture作为开始。

和MDX的差别

     如果您之前做的是MDX(Managed DirectX)的开发,现在想把您的游戏移植到XNA Framework中,那么可以访问XNA官方网站上的一个非常好的指导:http://msdn.microsoft.com/directx/xna/migration/ 。

     您也可以在XNA帮助文档中找到相关帮助,这里我不再赘述。不过您必须要记住的是,默认地XNA使用的是右手系(right-handed)坐标矩阵,而MDX使用的是左手系(left-handed)坐标矩阵,另外还有一些新的类和结构让您不必再使用Windows.Forms命名空间(namespace)。因为没有固定功能管道(fixed function pipeline)的支持,旧有的使用Windows Forms和句柄(handles)以及考虑兼容老的个人电脑的配置的工作方式也不再需要。Graphics和Shaders将在本书的第二部分讨论。

更多的工具和技巧

     您还应该看看XNA帮助文档中的关于“从头开始(Getting Started)”的帮助主题,会发现很多有关连接到Xbox 360、开始第一个项目以及其它初学者工具包的信息。

     就像我之前提到的,TestDriven.Net是一个非常好的工具,测试驱动开发(test-driven development)在本书中也是一个非常重要的方法学(见第三章)。对于.Net开发另一非常好的工具就是Ants Profiler,和我提到的其他的工具不同的是,它不是免费的,但您可以在网上找到一些有相同作用的工具。Ants Profiler可以用来直接查看您项目的每一行代码执行所用的时间,个人认为它比一些更高级的应用程序性能测试工具更好用,比如NvPerf(Nvidia)、PIX(DirectX SDK)或者Performance Counters of Windows。您可以很快地查出为什么渲染代码执行很慢,监测一些bug等等。

     有关更多的链接,可以在这里查看XNA的链接收藏:http://xnadevelopment.com/links.shtml 。

     还有更多的站点来介绍XNA,而且会发现每天都会有新的社区站点和资源不断涌现,您可以到Google查一下哪个是最受欢迎的。

184

主题

369

帖子

381

积分

中级会员

Rank: 3Rank: 3

积分
381
 楼主| 发表于 2009-3-13 15:01:00 | 显示全部楼层

《XNA高级编程:Xbox 360和Windows》1-5/1-6

1.5问题解答

     

     现在您已经知道了所有如何开始第一个XNA游戏项目的知识,如果您通读了本章内容,我强烈建议到www.wiley.com下载本章的示例代码并运行它。


     如果您在安装DirectX、.Net 2.0或者XNA时有任何问题,可以到XNA论坛http://msdn.microsoft.com/xna/forums 寻求帮助。在书中给出所有的解答很困难,因为有很多不同的问题会出现。总的来说,您要符合最低的安装要求。比如,如果尝试在一个不受支持的平台上安装并且失败了,您可以带着这个问题到网络上去查找相关的帮助,或者换一个受支持的平台试试。

     如果要安装.Net 2.0,要确保您的操作系统安装了最新的补丁包(Service Pack);对于DirectX,您要确保有最新的图形驱动和一个支持3D图形的像样显卡;对于XNA,要确保安装XNA之前的所有必要安装都已经正确执行。

     让XNA在Windows平台上工作不是很难,但在Xbox 360平台上会出很多问题。以下是一些技巧可以确保您满足了在Xbox 360平台上运行XNA游戏的基本要求:
您需要一个Xbox 360在线帐号,而且在开发和测试XNA游戏的时候要始终连接到网络
确保您的个人电脑和Xbox 360在同一个网络中并可以相互访问,可以从个人电脑PING您的Xbox 360的IP地址,或者从Xbox把个人电脑当作媒体中心进行连接
如果无法安装Xbox 360的XNA Framework,可以到网络上寻求帮助看看您的Xbox 360是否满足最低配置要求
如果您在XNA Game Launcher的设置中生成了一个密钥,但是在个人电脑上却无法通过验证,这有可能是您打错了密钥,或者密钥中包含了容易混淆的0(数字零)和O(字母O),您也可以重新生成一个密钥再尝试
如果您的XNA Game Launcher无法启动,或者所有的按钮都无法使用,或者收到类似0xffffffff这样的错误,则有可能是您的个人资料没有正确连接到Xbox Live中心,或者某些设置出错。如果之前安装过老版本的XNA Framework,那么要把它先卸载掉,删除个人资料,然后创建新的个人资料并重新安装XNA Framework
     第二章将更加详细地讲述在Xbox 360上运行游戏的每一步要求,不过本章的示例也可以工作在Xbox 360平台上,您只要启动项目,切换到Xbox 360输出,然后按F5运行,如果您的设置全部正确,那么也可以在Xbox 360上看到相同的输出。恭喜,您已经成功运行了您的第一个Xbox 360游戏!

     最后,如果您编译本章中的代码出现了错误,以下是一些最后的提示:
确保您定义了所有的变量:graphics,content,backgroundTexture,sprites和scrollingPosition
查看编译输出窗口中的错误信息,并相应地修改代码;或许您还在使用一些陈旧的方法调用,可以试着把它们替换为新的方法者注释掉,看看剩下的代码运行得如何
如果编译可以通过,但游戏运行时出错或抛出异常信息,极有可能是您漏掉了某个内容文件(比如本章示例中用到的CityGroundSmall.jpg)或者您的显卡不支持Shader Model 1.1

1.6本章摘要

     本章主要介绍了XNA基础知识以及如何让XNA Game Studio Express在您的个人电脑上正常工作,还介绍了怎样在您的Xbox 360上安装XNA Framework。您还创建了自己的第一个小项目——我并不把它叫做一个真正的游戏,不过它还是使用了texture,处理了Xbox 360控制器输入和键盘输入,并和屏幕之间有了一个交互——上下来回地滚动背景。

     接下来的几章将介绍如何编写很酷的小游戏。下面归纳了本章的学习要点:
XNA Framework基础知识
安装XNA Game Studio Express
在Visual Studio 2005上运行XNA的提示和技巧
介绍了一些有用的工具,比如TestDriven.Net,SourceSafe以及Ants Profiler
编写您的第一个XNA项目
介绍了应用程序模型的概念以及Initialize,Update和Draw方法
清空背景
使用SpriteBatch绘制texture
处理GamePad和键盘输入
根据输入绘制Tile背景

0

主题

9

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2009-3-17 17:20:00 | 显示全部楼层

Re:《XNA高级编程:Xbox 360和Windows》翻译系列

wow!thanks!可以回复吗?真的不错,谢谢翻译兄弟

5

主题

68

帖子

90

积分

注册会员

Rank: 2

积分
90
QQ
发表于 2009-3-28 03:20:00 | 显示全部楼层

Re:《XNA高级编程:Xbox 360和Windows》翻译系列

很不错哦,谢谢

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-5-18 21:14:00 | 显示全部楼层

Re:《XNA高级编程:Xbox 360和Windows》翻译系列

太强大了
!!!

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-11-3 21:43:00 | 显示全部楼层

Re:《XNA高级编程:Xbox 360和Windows》翻译系列

学习了 :〉


-------------------------------------------------------------------------------------------

欢迎访问开源图形处理器体系结构论坛(OpenGPU论坛) http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community(图形开源社区),聚焦领域(focus domain)包括:
  * GPU Architecture(图形处理器体系结构)
  * Graphics Algorithm(图形算法)
  * GPGPU Programming (面向通用的图形处理器编程)
  * Open Source Rendering Engine(开源渲染器)
  * Open Source GPU Simulator/RTL Implement(开源GPU模拟器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-4 22:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表