XNA框架是什么 

2006-12-31 14:37 发布

引擎学习交流 /[游戏引擎]
5041 1 0
What is the XNA Framework
.

Last week we announced XNA Game Studio Express, which is a product that enables students and hobbyist game programmers to create games using C# that will run on both Windows and their Xbox 360. The XNA Framework is the set of .NET libraries that developers will code against to build their games. As we get closer to the beta, I wanted to take a few moments and explain three keys to understanding the XNA Framework—namely, the goals of the XNA Framework, what the XNA Framework is, and what it provides.

上星期我们发布了XNA Game Studio Express,以使学生和爱好者可以在Windows和Xbox360两个平台上用C#开发游戏。XNA Framework是一系列帮助开发人员编写游戏的类库。在beta版即将到来之际我想来花点时间通过对XNA 的三个关键点的解释来说明一下XNA Framework,也就是:XNA Framework的目标是什么,XNA Framework是什么,还有它可以做什么

Goals 目标

We set out to accomplish two primary goals when developing the XNA Framework:

在开发的时候我们想到的是实现两个主要目的:

Enable Cross-Platform Game Development

支持跨平台的游戏开发

One of the key goals is to make it easy to develop games using the XNA Framework that will run on both Windows and the Xbox 360. We want to make it easy for you to develop your Windows game, for example, and then easily create an Xbox 360 version of it. Our goal is to provide a set of APIs that are about 95% normalized across the two platforms. There are some cases where we need to differentiate between the two because either the semantics are different enough that we shouldn’t hide it or there is specific functionality that is useful on one platform but not on the other. I imagine, though, that a high percentage of the games you create with the XNA Framework will in fact be 100% compatible across both platforms.

XNA Framework的一个关键目标是实现游戏在Windows和Xbox 360分别运行的简易性,以让你可以先在Windows上开发一个游戏,然后简单的移植到Xbox360上去。我们的目标是提供一系列可以涵盖大约95%功能的跨平台APIs。这里要说的是由于某些原因两个环境间仍会有部分的不同,例如有些操作可能只在一个平台上有效。我估计大部分你开发的游戏是100%跨平台的。

Simplify Game Development

简化游戏开发

Making games is hard. It’s hard for professional game developers and especially difficult for a student or hobbyist who is just getting into game development. It often takes a lot of code, time, and trial and error just to get to the point where you can start to draw something on the screen, or get input and make something move. One of the other primary goals of the XNA Framework is to make this much easier. As we’ve talked about this internally, we often talk about the “first 5 minutes” of the experience with XNA Game Studio Express and the XNA Framework. Our goal is for you to be able to start writing your game within the first 5 minutes of starting a project. You won’t have to worry about creating a window. You won’t have to worry about a message pump or an Idle event. You won’t need to enumerate graphic adapters and display modes. You won’t have to create a Direct3D 9 device and manage it when the window is resized or the game is minimized. The XNA Framework takes care of all those things for you. The first thing you do is write code for your game.

制作游戏是一项有难度的工作。从学生和爱好者想要成为专业游戏开发人员更加困难。常常要在如何实现绘图,输入,运动等地方反复试验而浪费大量的时间和代码。XNA Framework的另一个目的就是使这一切变得容易起来。当我们在进行内部讨论的时候,我们经常提到开发体验的“头五分钟”。我们的想法是使你可以在头五分钟内开始编写你的游戏。你不必要考虑创建窗口,消息事件队列的弹出和处理,你不需要给出图片处理程序甚至掌握显示模式。你不需要创建一个图形设备然后在窗口重新定义大小和最小化的时候管理它。XNA Framework替你处理了这一切。你要做的第一件事就是为你的游戏逻辑写代码。

Another problem is content— specifically, getting content into your game and making it consumable at run time. A feature of the XNA Framework called the Content Pipeline will make getting content into your game extremely easy. Michael Klucher will be talking more about this feature in a future post, but think of it as being able to treat content just like you would your code, as a piece of your project. The Content Pipeline will take care of importing, compiling, and loading it for you.

另一个问题是处理特定的游戏内容(Content),把一个内容导入到你的游戏中然后使它在运行时为你所用。XNA Framework的一项特性叫做内容管道(Content Pipeline)。通过它你可以极为简单的把一个内容引入你的游戏。关于这点将会在以后的文章作进一步的说明。不过想象一下,以后你可以像管理代码一样,将游戏的内容作为项目的一部分进行处理。内容管道将会为你处理内容的导入,编译和载入。

Another aspect of the “first 5 minutes” is a set of Starter Kits that we will be providing. A Starter Kit is a complete, fully functional game that includes all the source code and media available as a project template. They are available in the New Project dialog box and create a new copy of the game for you to then modify. The aim is that if you are just getting into game programming, you can dive into a complete game and change or tweak a couple of things here or there and get instant feedback as soon as you hit F5. Each Starter Kit will come with complete documentation, including a set of tutorials that will walk you through modifying or adding features to the game.

实现“头五分钟”的另一个方面在于我们将会提供一些Start Kits,这些Start Kits将会作为一个项目模版包含完整的游戏操作,以及源代码和媒体文件。在新建项目对话框中你可以使用它们,并在上面进行修改。最终你将可以直接打开一个在编写中的游戏,进行改写和调整之后,按下F5就可以马上得到反馈。每一个Start Kits都会有完整的说明文档,还包含一些指导教你如何修改增加游戏的特性。

Our efforts to simplify the game development process will continue to evolve through future releases. But our overall goal will continue to be lowering the bar for making games and opening up game development to an even broader set of would-be game developers.

未来的版本中游戏开发进程的简化还将得到不断改进。而我们总的努力方向就在于不断地降低游戏开发的门槛,使更多的人进入到游戏开发者的行列中来。

Layers层

When describing the XNA Framework and what it's made of, it’s useful to think of it as a series of layers.

在描述XNA Framework组成的时候,我们可以认为是一系列层次关系。

Platform平台

The platform is the lowest layer and consists of the low-level native and managed APIs that the XNA Framework is built on top of. Some of the APIs included in this layer are Direct3D 9, XACT, XInput, and XContent.

平台是XNA Framework的最下一层。它由一系列底层的原生代码和托管APIs组成。在这一层中有些APIs就是Direct3D 9, XACT, XInput和XContent.

Core Framework 核心框架

The core framework is the “first” layer of the XNA Framework and provides the core functionality that the other layers extend. If you had to associate something with Managed DirectX, it would be this layer. Found here are areas of functionality grouped into Graphics, Audio, Input, Math, and Storage. As we move forward with the XNA Framework, we'll build out this layer to provide additional functionality.

核心框架是第一层,并且提供核心操作用来给其它层的进行扩展。如果你想要在直接使用托管DirectX,就应该是在这一层。在这一层次中包含了对图像,声音,输入和数据存储的处理。当我们要改进XNA Framwork,附加新的功能我们就要增建这一层。

Extended Framework 扩展框架

The main focus of the extended framework layer is making game development easier. Currently, this layer has two main components: the Application Model and the Content Pipeline. As we move forward with the XNA Framework, we'll extend this layer to make it even easier for you to write games and expand the target audience.

扩展框架主要致力于游戏开发的简化。当前这一层有两个主要的部分:应用模块(Application Model)和内容管道。我们将通过这一层使你可以更容易的开发游戏,同时便于扩展。

Games游戏

Games are the highest layer (even though we're at the bottom of this list!). This layer consists of your game code and content. Also found here would be things like Starter Kits, templates, and game components.

游戏部分是最高的层次。这一层包含你的游戏逻辑代码和内容。在这一层将你的游戏逻辑和内容相整合。Start Kits、游戏模版和游戏内容部件就属于这一层。

Features特性

So we’ve talked a lot about the goals of the XNA Framework and how it’s layered by functionality. But what is in the XNA Framework? Let’s take a look:

以上我们谈论了许多关于XNA Framework的目标以及它所划分的功能层次。但什么是XNA呢,让我们来看看。

Application Model 应用模块

The purpose of the Application Model is to abstract away the platform your game is running on and let you focus on writing your game. You don’t have to worry about creating a window, handling the message pump, creating a timer or clock, or handling window messages. We provide all of that for you. We also provide a GraphicsComponent that makes it extremely easy to create and manage a GraphicsDevice, which you use for rendering. On the Xbox 360, you don’t need a window or a message pump to handle window messages, but you don’t need to worry about that either because the programming model is the exact same on both platforms. This is also where we provide our component model, which allows you to easily incorporate GameComponents written by others into your game. This is a great way to get up and running quickly or to build a library of reusable components. This is one area that I’m excited to watch grow as I think we’ll see some amazing things from the community and our partners.

应用模块的意图在于抽象你的游戏所运行的平台,让你专注于游戏的编写。你不必关心创建窗口,管理消息队列,创建定时器或时钟和处理窗口消息。我们全都替你进行了封装。我们也提供一个GraphicsComponent(译注:图形组件,是一个类)以极为简单的方法对要绘图的图形设备进行创建和管理。在Xbox360上是不需要窗口和窗口消息的,这和Windows有很大不同,你也不必担心,因为在应用模块上两个平台是完全相同的。我们也提供通用模块让你简单的和其它人在游戏中合并GraphicsComponent,通过这样可以快速的建立可重用模块。GameComponents (译注:游戏组件集合,也是一个类)在你的游戏中可以由别人所写入。这样的处理在建立和快速运行或实现一个可重用的库的时候是很重要的。这一部分是我亲眼看着完善起来的,我相信我们将看到用户通过它实现许多神奇的东西。

Graphics图像处理

Our Graphics APIs are based on the Direct3D 9 APIs. They started out as very similar to the MDX set of types but have gone through some pretty major refactoring and cleanup to make them even easier to use and more consistent with the .NET Design Guidelines. One big change from MDX is that we’ve decided to remove support for the fixed-function pipeline in favor of an all shader-driven programmable pipeline.

我们的图像APIs是基于Direct3D 9 APIs的。它们非常类似于MDX类型结构,但是经过了精心的重构和清理使它更容易使用,并且和.Net的设计方针保存一致。这部分和MDX最大的不同的在于,我们决定取消固定函数式(fixed-function)的管理方式,而使用一种全渲染驱动可编程管道(all shader-driven programmable pipeline)

There are a few reasons why we made this decision. First, a programmable pipeline is the future of real-time computer graphics. Direct3D 10 does not offer support for fixed function. Neither does the Xbox 360. When we discussed this with some early adopters and customers, we were somewhat surprised when they stated that the cross-platform goal of the XNA Framework is more valuable than the fixed-function pipeline. The fear is that someone would start their game out on Windows and use the fixed-function APIs (perhaps without even knowing it) and get the game completed. Then they would decide to try and run it on the Xbox 360 and they would immediately get hit with dozens, if not hundreds, of compiler errors. It would be a better experience if you knew from the start that your code would work on both platforms from the start.

我们这样做是有原因的。首先,可编程管道是实时计算机图形的未来。Direct3D 10和Xbox360都不再为固定函数提供支持。当我们和一些早期的合作者和客户讨论这些问题的时候,我们还是多少有点惊讶,其实他们对于跨平台的关注大于对原固定函数的关注。由于害怕在Windows中用固定函数APIs开发的程序(也许开发人员都不确切知道),在移植到Xbox360上时立刻得到大量的编译错误。当知道你的代码在一开始就可以确实的跨平台运行,这实在是令人放心不少。

We realize that moving up to writing shaders and effects is a big step, so we’re trying to ease that by providing the API Migration Guide: Managed DirectX 1.1 to XNA Framework (Beta 1), as well as a BasicEffect type that is an Effect but exposes some easy to use properties such as lights and textures in a strongly typed manner so that the “first 5 minutes” experience is still in reach. You can, using the BasicEffect, get something up on the screen very quickly and easily without having to actually write a shader. Then when you feel comfortable with writing shaders and effects, or you’ve outgrown what type of rendering the BasicEffect offers, you can start writing your own shaders and effects and use those directly.

我们还发现掌握渲染和特效是游戏编写中要迈出的一大步。所以我们尝试在托管DirectX 1.1 到 XNA Framework (Beta 1)中提供了一些移植向导式的API。例如BasicEffect类可以简单的通过设置属性,包含光照、纹理等等就可以在“五分钟”内实现对一个物体的呈现。使用BasicEffect而不需要直接去编写渲染,就可以很快地在屏幕上显示出一些东西。然后当你开始对渲染和特效较为熟悉,或者可以扩展类BasicEffect的呈现功能时,你也可以直接用它们来写你自己的渲染和特效。

Audio 声音处理

Our Audio APIs are built on top of XACT, which is the Microsoft cross-platform audio API for Windows and the Xbox 360. The idea behind XACT is somewhat similar to shaders in Direct3D. Sound authors use the XACT tool to create “packages” of sound effects and configure things like volume, looping, channel mixing (including 5.1), etc. The developer then takes the package, loads it, and can easily play sounds by name, not having to worry about initializing buffers, streaming data in, or other management. The sound author can create a “BigExplosion” sound that consists of a few different WAV files, has an LFE effect, and mixes between the other channels. The programmer doesn’t need to know any of these details; he just gets the cue for “BigExplosion” and calls Play on it. Nice and simple!

我们的声音APIs是建立在Windows和Xbox360通用的声音API——XACT上的。XACT的理念和Direct3D的渲染部分类似。声音的制作人员使用XACT的工具创建好声音效果包(packages),并且配置好音量,重复次数,声道混音(支持5.1)等等。开发人员得到这样的包之后再载入它,然后就可以简单的通过包的名字来调用声音,而无须考虑缓存,流导入等其它管理细节。例如音效人员制作了一个包含几个wav文件,有LFE效果并且和其它通道混音的声音包“BigExplosion”。而程序员不需要知道这方面的细节,他只要得到“BigExplosion”,然后对它调用Play。漂亮!简洁!

Input输入处理

The Input API is built on top of XInput, which is the cross-platform API that drives the common controller (Xbox 360 Controller). Input offers an immediate mode API that requires no initialization. No need to worry about acquiring or releasing a device, setting the sharing mode, etc. All you need to do is call GetState on the appropriate controller type and that’s it! We provide a GamePad type that represents the Xbox 360 Controller for Windows and the Xbox 360, as well as Keyboard type for both platforms and a Mouse type for Windows.

输入API建立在基于一般Xbox360的控制器(译注:就是手柄)的XInput API之上,它也是跨平台的。输入提供一个立即模式(immediate mode)API而不需要初始化。不需要考虑获得或释放设备,设置共享模式等等。你只需在恰当的控制器类型上调用GetState就行了。我们提供了一个GamePad类型用来表示Windows和Xbox360上的Xbox360控制器。同时在Windows中还有键盘类型和鼠标类型。

Storage 存储处理

The Storage API provides the way you can read and write game data (such as save games, high scores, etc.) in a platform neutral manner. On Windows, this isn’t a big deal since you have System.IO and the Environment methods that allow you to the correct location for the current user. On the Xbox 360, you need to associate game state with a profile and a storage device, such as the hard drive or a memory unit. Storage makes it very easy to do so, and, in keeping with the cross-platform goal, we “emulate” this on Windows so you can use the exact same code on both platforms to read and write your data.

存储API提供了以平台无关方法来读取和保存游戏数据(例如保存游戏状态,高分值等等)的途径。在Windows中这不是什么问题,因为你可以使用System.IO。并且你可以通过环境(Environment)方法正确的为当前用户定位到存储的数据。在Xbox360上你需要使用Profile和存储设备来操作游戏状态,例如硬盘和记忆卡。XNA Framework的存储处理部分使这些变得很容易,并可以达到跨平台的效果。我们在Windows上对Xbox360这些操作进行了模拟,以使你用完全一样的代码在两个平台上读取和写入数据。

Math 数学逻辑部分

Our Math API provides the types often used for game programming such as Vector2, Vector3, Vector4, Matrix, Plane, and Ray. We also include bounding volume types including BoundingBox, BoundingSphere and BoundingFrustum. Our bounding volume types include methods for doing intersection and containment tests. One thing to note is that our math libraries are right-handed by default. What I mean by that is on our Matrix, for example, we provide a CreateLookAt method, which provides a right-handed view matrix instead of offering a CreateLookAtLH and a CreateLookAtRH. The reason we’ve decided on going with this is to ease integration in both content and middleware components. If everyone can agree on the coordinate system, then it makes it much easier to use content or APIs from outside of the XNA Framework. I say “by default” because there is nothing that requires a right-handed system. So if you absolutely need to be left-handed (or something else) you can do so, you’ll just need to do some of the calculations yourself.

数学API提供了一些游戏中常用的数学类型,例如Vector2, Vector3, Vector4, Matrix, Plane,还有 Ray。我们也提供了一些包容盒(bounding volume)类型例如BoundingBox, BoundingSphere 和 BoundingFrustum。我们的包容盒类型包含了判断相交和包含的方法。需要注意的是我们的数学库默认是右序的。这里我指的是在Matrix(矩阵)上的情况。例如我们只提供了一个对矩阵右序查看的CreateLookAt 方法,而不是分别提供CreateLookAtLH 和 CreateLookAtRH。我们这样设计的目的在于使其它外部内容和中间件的整合都较为统一而容易。如果大家都遵守这个约定那么按照这样开发的XNA Framework和外部的APIs就可以较容易的联合使用。以上我说的是默认的时候,进行左序操作是无需其它条件的。如果你确实需要使用左序(或者其它方法)操作也可以,你只需要自己写操作代码。

Futures展望

We are super focused on getting v1.0 of XNA Game Studio Express and the XNA Framework into your hands, but we are also looking at what our future releases look like. As I mentioned earlier, we will look at extending the core framework layer by adding additional functionality and we’ll look at building out the extended framework area to make it even easier to create games using XNA Game Studio Express. We will also introduce XNA Game Studio Professional, which will enable developers to create commercial games for the Xbox 360 by using the XNA Framework. Look for more details about what this means in the coming months.

目前我们注意力主要在刚发布到你手上的XNA Game Studio ExpressV1.0以及XNA Framework上。但是我们也在考虑未来版本的特性。如前面提过的为了添加新的功能操作,我们将对Core Framework层进行扩展。同时对Extended Framework进行增建,使得用XNA Game Studio Express创建游戏更容易。我们也会推出XNA Game Studio Professional,以使开发者可以用XNA Framework在Xbox360上开发商业游戏。请在下一个月中留意这方面的情况。

Wrap Up 封装

I mentioned that one of the goals of the XNA Framework is to make it easier to write games; to allow you to focus on your game and not the platform. How simple is it? Well, the code below results in a working application and illustrates the basic skeleton of an XNA Framework game.

我提到XNA Framework的一个目标在于让编写游戏更容易,使你专注于你的游戏而不是平台。它到底有多简单呢?下面的代码显示了一个可运行的XNA Framework游戏应用程序大体框架

 public class SampleGame : Game
  {
    private GraphicsComponent graphics;


    public SampleGame()
    {
        this.graphics = new GraphicsComponent();
        this.GameComponents.Add(graphics);
    }


    protected override void Update()
    {
    }


    protected override void Draw()
    {
        this.graphics.GraphicsDevice.Clear(Color.Blue);
        this.graphics.GraphicsDevice.Present();
    }


    static void Main(string[] args)
    {
        using (SampleGame game = new SampleGame())
        {
            game.Run();
        }
    }
 }

Thanks for taking the time to read this post. I hope it explained what the XNA Framework is and what it provides. The beta will be released in just a few days, so please download it and take it for a spin. Then tell us what you liked, what you disliked, or what wasn’t clear—we want to make this the best product for you that we can.

感谢你花时间阅读这篇文章。我希望我已经讲明白了XNA Framework到底提供什么。Beta版将会在几天内放出,所以欢迎您下载下来使用。然后告诉我们那些是你喜欢的部分,哪些部分是你不喜欢的或者不清楚的。我们期望能为你做出我们最好的产品。

The team can’t wait to get XNA Game Studio Express into your hands and see what you do with it!

XNA团队等不及看看XNA Game Studio Express在你的手中可以产生出什么样魔力。

Mitch Walker

program manager | xna framework

B Color Smilies

全部评论1

你可能喜欢

XNA框架是什么 
联系
我们
快速回复 返回顶部 返回列表