XNA的注意事项
为了完成这一个章节,这里有另外一些关于XNA 框架 和XNA Game Studio Express的技巧和窍门。如你所见,你知识能够开始编码和顺利工作,但是当你运行遇到问题,或者不知道如何解决一个特定的问题,依赖于浏览器的一个个书签总是有好处的。
另外,这一个章节部分讨论了.NET和 C# 的一些优点,而且检验XNA与Managed DirectX之间的不同。
重要的超链接
只是一些给你书签的链接。
-
http://msdn.microsoft.com/directx/xna/ - 在微软MSDN上的XNA开发者中心页与XNA Game Studio 和XNA 框架论坛,它是你在Internet上发现的最活跃的XNA 论坛。在这里,你也能下载最近的XNA 版本。阅读FAQ,并且看更新的内容。
-
http://en.wikipedia.org/wiki/Microsoft_XNA -进入Wikipedia关于 XNA,经常更新并且包含许多其他主题的链接。网页底部有一些有用的外部链接被罗列。
-
http://xnadevelopment.com - 好的新站点,有大量的链接、指南和让你开始在XNA 世界的技巧。
-
http://xnaresources.com -另外一个新站点,有大量的新闻,和一些实在有用的瓷片引擎指南。也包含许多你可能喜欢的游戏组件。
-
http://learnxna.com - 博客形式的XNA新闻网站, 也包含一些视频教程,并且聚焦在学习XNA和图形工具的技巧和窍门。
-
http://abi.exdream.com - 作者的官方网站。在这里,你能找我做的更多游戏,连同Rocket Commander XNA,XNA Shooter,或来自于本书的竞速游戏,和所有文档和我为此而制作的视频指南。另外,我建议检验Rocket Commander视频指南,它在Coding4Fun相当流行。
C#有利于开发游戏吗?
像www.GameDev.net那样的网站,不断有论坛贯穿讨论C++和C#之间的差别。通常在一些回复之后,它们都终结于一个无意识的语言战争。回到.Net早期(2002)我讨论过相当多的这些思路, 但是当99.9% 的程序员站在C++一边那就太郁闷的了,而且没有办法使人信服,因为他们甚至不真诚对你。不计主观感觉的好恶,语言战争不真正的把C#当作一门语言,因为JAVA做为游戏编程平台是失败的,除了蜂窝电话游戏以外。因为JAVA和C# 都是托管的语言,并且看起来非常相似。但是如果你考虑到同样的战争发生在C取代汇编语言,C++取代C的日子。甚至今天,C++被Bjarne Stroustrup开发了20多年之后,一些游戏程序员仍然使用C,并不完全得益于C++。即使你看一看流行游戏引擎的源代码,像Quake 或者Half-Life,看上去更像C而不是C++。
在游戏编程世界真是奇怪;每个人害怕经由转到一种新的语言,失去太多的执行效能,并且另外也可能失去他们的旧密码基础或者将它转换到一种新的语言有大量的工作。然而,游戏程序员很快采用新技术和脚本语言,而且总是在最新的硬件发展上。甚至在Shader Model 4显卡可被获得的一年以前,我们游戏开发者就得到了DirectX 10。
在2001年底,在检验早期的beta版之后,我很快地就在2002年初就采用了.Net和C#。我正好开始了一个新游戏引擎,并且我们团队有一个想做的工程项目。绝对没有图形引擎或者任何别的,除了一些简单的.Net早年的2D游戏。直接在C#上使用OpenGL和DirectX非常难。它需要大量调用非托管的dll,并且卷入大量讨厌的指针逻辑,它是C#中唯一可利用的非安全代码。在2003年,微软最终发布了Managed DirectX的第一个beta,它使得相当容易地在.NET中,编写新DirectX应用程序成为了可能。使用Managed DirectX取代本地DirectX dll被证实只有1%-2%的执行效能损失,这真的不重要。然而,这不意味着游戏开发者正在跳上C#;每个人仍然非常怀疑,并且甚至在我发布第一个商业性的.Net游戏之后。,即2004年的Arena Wars,它花了又一年,直到越来越多的开发者最终给予.NET又一次机会。学生和初学者尤其真的感谢C# 的简单,以及越来越多的人开始.NET开发游戏。C++ vs C# 的讨论依然存在,而且讨论点仍旧时同一个,但是其结果现在平衡得多(我停止看任何有“vs”名称的主题很长时间了;一而再地阅读相同的争论仅仅是浪费时间)。
总是记得你会陷入一些家伙之中,他们可能告诉你 C++ 是长者而且 C# 只是给新手。相同的事发生在汇编语言和几年前的C++之间,并且未来有使我们的生活变得更容易的新的语言,而且仍然立刻有人迟疑犹豫采用它们。大多数的大型game studios 也不会立刻采用每一个新技术;它们可能是在一些大的工程项目中间,并且他们也有非常大的代码基地,移植它可不容易。可是,长时间运行之后,代码将会转换,并且我们将进阶到高层次语言。
图 1-15是一张我做的老图片显示使用C++ 的DirectX 和使用C# 的Managed DirectX的区别。如你所见, MDX代码是非托管代码的几乎一半长。对于XNA来说可能更短,而且更容易载入纹理并在屏幕上显示, 但与MDX作比较是困难的,因为概念不一样。
慢慢熟悉内容管道
当你看到你先前的第一个XNA 工程项目,它相当容易到,只要拖拽和放下一个纹理到XNA Studio里的游戏工程项目。虽然所有的游戏内容放在一个地方并且直接与代码文件并排很好。有一些事物你必须记得。在我的生活中所见的大部分工程项目,不是直接把纹理、模型、或shader直接放Visual Studio 工程项目。 这样做的的理由是事实上,很非常容易到仅仅拷贝了一些新文件在上面,然后让游戏直接地加载它们。Visual Studio 默认也是不拷贝任何内容文件到你的输出目录;你必须从None to Content改变 Build Action ,并且设置如果有新内容,就Copy 到输出目录。这是一个相当大的麻烦,而XNA 使它稍微化简了。
你可能甚至会问为什么改变你以前加载纹理的方法呢?如果你仅仅想要你的游戏运行在windows平台上,你当然可以加载纹理和动态阴影,并且在它们第一次当做 XNA 内容文件进入你的工程项目时不导入。在游戏的时候,能改变纹理和动态阴影是有利的(一个不被XNA 内容管道支持的特色)。可是,因为没有其他加载方法来自于ContentManager类,该类只加载编译过的.xnb 内容文件,模型文件不工作。
在Xbox 360上你只能加载内容文件;不支持直接地加载纹理和阴影。 如果你使用直接的纹理或加载阴影,肯定你会不容于Xbox 360 平台代码;Xbox 的dll不支持加载任何内容文件以外的一切。
更多细节有关重要的模型文件,阅读这书第2部份的章节。这一个主题不像使用纹理一样容易。因为这一个部分坚持于精灵和2D纹理,而且使事物保持简单。因为简单的2D游戏,它很好很容易,但是写一个认真的游戏。你将需要3D模型和许多酷的阴影(shader)效果。 我也建议你找一个艺术家为你做纹理和3D模型。 它是一个相当复杂的主题,并且亲自做所有的事可能浪费许多时间。其他人也可能更擅长做纹理和3D模型;利用你的编码技能,而且让其他人做美工。如果你没有任何的艺术家可用,试着使用来自于本书和XNA starter kit的一些模型和纹理来开始吧。
和MDX的不同处
如果你来自于MDX (Managed DirectX) 并且想移植游戏到 XNA 框架,有一个很棒的向导在http://msdn.microsoft.com/directx/xna/migration/.XNA的官方主页。
你能在XNA文档中找到相同的帮忙。在这里,我不想重复所有的,但是基本上你必须记得XNA 使用右手系矩阵而MDX 默认是左手系。也有一些新的类和结构体来确保你不再需要 Windows.Forms 命名空间。因为不再支持固定功能管道,Windows Forms 旧的工作方法、句柄、以及支持旧PC配置的考虑不再必要了。图形和阴影(shaders)被本书的第二部分讨论。
另外的工具和提示技巧
另外,你应该看一看XNA文档的Getting Started帮助主题,XNA Studio Help --〉 Contents --〉 XNA Game Studio Express。 你能找到更多信息,关于Xbox 360的连接、编写你的第一个工程项目,以及有关所有的starter kit。io Express。 你能找到更多信息,关于Xbox 360的连接、编写你的第一个工程项目,以及有关所有的starter kit。
在我前面提到的,TestDriven.NET是Visual Studio的一个好的工具并且测试-驱动的发展是本书一种非常重要的方法论(见第3章)。
另一个棒的工具为.Net发展是Ants Profiler。不像所有的其他工具和至今为止我提到的程序,它是不免费的,但是在网上有替代选择可用,它也能帮忙你。Ants Profiler能用来直接地看你项目的每一代码行话了多长时间。依我之见,这比使用一些高阶层的应用程序性能工具,如来自 Nvidia 的 NvPerf 的工具更有用很多,来自 DirectX SDK的PIX,或使用windows的性能计数器要有用得多。你能很快地明白为什么你的渲染代码部份变得缓慢,太频繁的侦测bug会调用慢速方法,并且通过一些新的有趣的可获得信息,复习你的代码总是好的。因为Internet上有更多的链接,检索XNA 的链接收集在 http://xnadevelopment.com/links.shtml。关于 XNA 有更多站点,并且似乎每天你能见到一些新的社区网站和更多资源。做一个Google搜索会发现哪一个网站是最流行的。.