Microsoft XNA

XNA開發者| Microsoft

|

当前版本| 4.0（2010年9月16日）
操作系统| Microsoft Windows
类型| 应用程序框架
许可协议| EULA
网站| XNA Homepage

Microsoft XNA ("XNA's Not Acronymed"[1])，完全支援受控代碼的運行環境，由微軟提供用以幫助電腦遊戲開發、電腦軟件開發及管理的一些工具。XNA把遊戲設計員從“反覆刻版編程”中解放出來[2]，還把遊戲開發上的所有需要結合到一個系統之中[3]。XNA 工具集在2004年3月24日在美國加州聖荷西市的遊戲開發者大會首次亮相，第一個公開技術預覽在2006年3月14日推出，最新版本3.0在2008年10月30日推出。

## 概觀

[编辑]

### XNA Framework

[编辑]

XNA Framework 是建置於.NET Framework 2.0上，XNA 將DirectX的功能以受控代碼的方式封裝運作（因此微软终止了Managed DirectX 9.0的開發，所以有人称XNA为Managed DirectX 2.0），另外還加入了一些專注於遊戲開發上類別庫，在指定的平台上使“程式碼重用”達之最大效果。XNA Framework 在一個特別為有管理式遊戲運行的通用語言運行庫（Common Language Runtime）版本上運行。這個執行層支援Windows XP、Windows Vista、Windows 7、Windows Phone 7和XBox 360。由於遊戲是開發在執行層上，使得遊戲能在所有支持XNA Framework 的平台上只要很少甚至不需要任何更改便能運行。現時所有在XNA Framework 上的遊戲必需使用C #和XNA Game Studio Express IDE[1]開發。

XNA 的程式都是繼承自Game class，它包含了所有重要的游戏组件，比如图形设备（Graphic Device）、窗口设置以及内容管理器，你也可以添加GameComponent class到你的Game class。XNA Framework 把所有用作遊戲編程的低階技術封裝起來，例如XNA提供了Effect（BasicEffect）類別來處理大部分繪圖著色相關的工作，開發人員不需再理會“矩陣變數”相乘，只要指定物件的World、View、Projection即可[註 1]，其相乘效果由Shader檔自動處理。Effect 本身還能用于加载和编译shader, Effect.CurrentTechnique 可用於指定technique, 像是AmbientLight; Effect.SetValue可以用來設定Shader的參數。一个effect包含一個或多個technique，一个technique包含一個以上的pass。在pass裡面可能還有VertexShader, PixelShader，這些元素構成一份effect文件, 這也就是極簡化後的HLSL程式碼。因此，遊戲開發員就可以專注於遊戲內容開發而不用關心遊戲移植至不同平台上的問題，遊戲只要開發於XNA 的平台上，所有硬體只要支援XNA都能運行。XNA Framework 還內置一些工具，例如XACT以幫助遊戲內容開發。這些工具還能幫助開發視覺和聽覺效果和和像真度很高的模型制作。

XNA Framework 同時支持2D 和3D 的遊戲開發也支援XBox 360 的控制器和震動效果。Content Pipeline被用来导入.fbx格式，而且加载像纹理（Texture）、3D模型、着色器（shader）。Shader指令經過編譯之後，直接載入到顯示卡上的GPU來執行。Xbox Live賣場可以升級開發者的XNA Game Studio Express 以使能把他們開發的遊戲用於Xbox 360上。

### XNA的流程簡介

[编辑]

首先，讓我們看看Programs.cs檔案的摘要內容:

using System;
namespace WindowsGame1

#if WINDOWS || XBOX
static class Program

static void Main(string[] args)

using (Game1 game = new Game1())

game.Run();

#endif

首先要使用System名稱空間，並且判斷執行環境是否在Windows或是Xbox360下

並寫了一個靜態類別 Program 裡面的static void Main(string[] args){...}

是程式的進入點(C#基本常識)，然後產生一個Game1物件game，最後使用Game1物件的run方法執行遊戲。

後面介紹有關Game1物件的類別分段程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

這裡是很基本的命名空間使用，簡介每個名稱空間的用途。

1. System C#最基本的名稱空間
2. System,Collections.Generic 泛型的名稱空間
3. System.Linq Ling(一種嵌入式的資料庫查詢語言)的名稱空間
4. Microsoft.Xna.Framework XNA基礎名稱空間
5. Microsoft.Xna.Framework.Audio XNA音效方面名稱空間
6. Microsoft.Xna.Framework.Content XNA內容輸出入名稱空間
7. Microsoft.Xna.Framework.GamerServices XNA玩家權限名稱空間
8. Microsoft.Xna.Framework.Graphics XNA繪圖名稱空間
9. Microsoft.Xna.Framework.Input XNA輸出入(鍵盤、滑鼠)名稱空間
10. Microsoft.Xna.Framework.Media XNA多媒體名稱空間

namespace WindowsGame1

.....

首先設定了一個WindowsGame1的名稱空間，裡面包含著一個類別:

public class Game1 : Microsoft.Xna.Framework.Game

......

Game1類別，繼承Microsoft.Xna.Framework.Game類別

其中Game1類別裡面又有

GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

public Game1()

graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";

GraphicsDeviceManager類別是管理有關繪圖卡方面的設定

SpriteBatch類別則是有關2D圖片、文字的繪畫設定。

還可以看到一個建構式public Game1(){...}

裡面讓graphics物件先產生出來

並規定Content的目錄在Content資料夾之下

接下來

protected override void Initialize()

base.Initialize();

是一個覆寫原父類別的初始方法

因為Microsoft已經把繁複的初始內寫在父類別當中

變得相當簡化，直接呼叫base(基底類別)使用即可

所以可以讓製作者專心在遊戲重點的初始化

接下來

protected override void LoadContent()

spriteBatch = new SpriteBatch(GraphicsDevice);

這是覆寫讀取材質 音效...etc的方法，先讓spritBatch物件透過繪圖裝置參數，而產生

然後製作者可以上載其想要的內容，寫法如下:

Content.Load<T>("AssetName");

T可以是很多種類型，像是Texture2D、Model...等，而AssetName則是內容名稱。

這裡主要是使用到了泛型

protected override void UnloadContent()

這個覆寫方法是用來回收內容的。接下來

protected override void Update(GameTime gameTime)

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
base.Update(gameTime);

這是覆寫了邏輯更新的方法，也是整個遊戲的重心所在，GameTime物件可以取得遊戲時間。 另外透過GamePad物件 可以得知玩家1是否按下了倒退鍵而結束遊戲 如果想透過鍵盤可以這樣寫:

if (Keyboard.GetState().IsKeyDown(Keys.Back)){...}

最後會呼叫父類別 base.Update(gameTime);

接下來

protected override void Draw(GameTime gameTime)

GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);

這部分是繪圖的部分，也需要遊戲時間確定畫面跟邏輯更新是同步的， 首先使用GameDevice物件Clear方法，把畫面清成淡藍色，同時也呼叫父類別進行運作。 Update跟Draw會連續進行每秒鐘60HZ的更新速度來跑動遊戲，直到出現離開程式指令。

### XNA中实现Shader

[编辑]

BasicEffect是XNA 內建的 Shader, 支援12種渲染模型，ContentPipeline根据xnb模型文件说明，设置模型的MeshPart的BasicEffect参数。

XNA中实现Shader很简单。對XNA程式來說，Shader是一個小程式，只要把shader文件（.fx）导入到Contents 即可，會自动生成素材（material）。

technique Technique1

pass Pass1

VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();

再透過XNA Effect class 來加载和编译shader。HLSL可以在XNA或是DirectX使用。

effect = Content.Load<Effect>("MyShader");
effect.CurrentTechnique = effect.Techniques ["AmbientLight" ];
effect.Begin();
foreach (EffectPass pass in effect.CurrentTechnique.Passes)

pass.Begin();
...
pass.End();

effect.End(); // 終止使用 effect

如果想要改用BasicEffect 以外的Shader, 你必須自己呼叫DrawPrimitive()。

### XNA Build

[编辑]

2006年, Microsoft XNA Build March 2006 CTP 在GDC 上被发布。XNA Build 是一工具，允许你管理复杂的编译，类似Msbuild 和Ants，功能更强大。2006年8月30日微软宣布了XNA Game Studio Express Beta1。2006年12月微软又发布了XNA Game Studio Express的正式版，该版本加入了内容管道（Content Pipeline）。

### XNA Game Studio

[编辑]

2010年美国当地时间3月15日，微软官方XNA发布了期待已久的XNA 4.0的社区预览版和路线图，包含在Windows Phone Developer Tool CTP中。目前只有英文版本，可以用于编写Silverlight或XNA for Windows Phone游戏，Xbox游戏，PC游戏，没有Zune游戏的开发模版。

#### XNA Game Studio Express

[编辑]

第一個XNA Game Studio Express 的beta版本首度於2006年8月30日提供下載，2006年11月1日有第二個版本推出。2006年12月11日微軟首度提供正式版[4]

2007年4月24日, Microsoft 更新 XNA Game Studio Express 1.0 Refresh.[5]

#### XNA Game Studio 2.0

[编辑]

XNA Game Studio 2.0 於2007年12月13日推出[6]. XNA Game Studio 2.0[7]Visual Studio 2005亦實作有相同的特色與功能 (包括免費的 Visual C# 2005 Express Edition)。

#### XNA Game Studio 3.0

[编辑]

XNA Game Studio 3.0 (基於Visual Studio 2008) 支援Zune的遊戲開發。beta版在2008年9月推出.[8]2008年10月30日推出正式版. XNA Game Studio 3.0 目前可支援 C# 3.0, Visual Studio 2008之上還支援LINQ. 在XNA3.0中，SoundEffect可以不透過XACT也可以做到特效的處理。

#### XNA Game Studio 3.1

[编辑]

XNA Game Studio 3.1於2009年6月11日推出。可支援 video playback, 並修正了Audio API, 還支援Xbox LIVE Party system 並且可以使用 Xbox 360 Avatars[9]。

#### XNA Game Studio 4

[编辑]

XNA Game Studio 4 最早2010年3月9日由 "Community Technical Preview" 在 GDC 上發布, 並於2010年9月16日完整推出[10]。XNA 4整合了Visual Studio 2010, 可支援Windows Phone 7 平台 (包括：3D API的硬體加速)。VertexDeclaration 在 XNA Game Studio 4.0中略有改變，另外SpriteBatch.Begin也可以配合pixel shader。

### XNA Framework Content Pipeline

[编辑]

XNA架構素材管道（XNA Framework Content Pipeline）是一種可延伸的素材处理框架，素材（Content）是在Visual C# Express内进行管理。在添加素材时，需要选择工具（importer），例如: Autodesk FBX，.FX, .XAP，這些工具用於接收資料，FBX是一种转移3D（3D transport）文件格式，将其标准化（normalize）。

### XDK Extensions

[编辑]

正式名稱是 XNA Game Studio Professional, XDK Extensions 是 XNA Game Studio 附加，可用於發展Microsoft Xbox 360.[11]

### XNA 批評

[编辑]

雖然已被世界上很多開發員採用，但XNA 並未能真正發揮的作用，例如使遊戲編程更容易。這是因為他沒有一些重要的功能如骨骼动画（Skeletal animation），對初學者而言還是比較複雜的編程。另一個問題是有人認為XNA 沒讓開發者有太多控制權，這使得大多數的大型遊戲制件過還是用C++直接調用DirectX。

在程式編輯上，XNA 確實大幅改善了繁雜的程式設計。包括：資源回收系統、簡易聲音API, 與背景保護程式的衝突改善等。但是由於企業界已經投入大量心力在C++與DirectX上面，目前仍然鮮見有企業願意針對新語言C# 還有新平台XNA 進行投資。

## 注释

[编辑]

1. ^ World指世界矩陣，用來做縮放平移旋轉等動作。View是觀察矩陣是將觀察者的位置轉換到原點。Projection是投影矩陣是將投影的大小調整到[-1, 1]之間。

## 参考文献

[编辑]

1. ^ 1.0 1.1 Microsoft XNA Frequently Asked Questions.  [2007-02-23]. （原始内容存档于2008-10-15）.
2. ^ Microsoft: Next Generation of Games Starts With XNA.  [2007-02-23]. （原始内容存档于2008-02-06）.
3. ^ YouTube: XNA explanation from experts.  [2007-02-23]. （原始内容存档于2018-02-07）.
4. ^ Gamefest announcement of XNA Game Studio Express.  [2007-02-23]. （原始内容存档于2006-08-20）.
5. ^ XNA Team Blog : XNA Game Studio Express 1.0 Refresh Released.  [2011-04-25]. （原始内容存档于2009-11-03）.
6. ^ XNA Creators Club Online - quick start guide.  [2011-01-26]. （原始内容存档于2008-10-12）.
7. ^ XNA Tutorial.  [2007-02-23]. （原始内容存档于2020-07-21）.
8. ^ XNA Creators Club Online - xna game studio 3.0 beta.  [2011-04-25]. （原始内容存档于2008-09-18）.
9. ^ Dream Build Play '09/XNA Game Studio 3.1 Announcement.  [2011-01-26]. （原始内容存档于2009-12-12）.
10. ^ xna game studio 4.0 available for download!. XNA Game Studio Team Blog. Microsoft. 2010-09-16  [2010-09-16]. （原始内容存档于2011-08-07）.
11. ^ Download details: GDC 2009: XNA Game Studio Program Overview.  [2011-01-26]. （原始内容存档于2010-07-24）.

## 外部链接

[编辑]

* Microsoft XNA official homepage （页面存档备份，存于互联网档案馆）
* "XNA Game Studio Express Beta 2 Launches" （页面存档备份，存于互联网档案馆） from IGN
* XNA Samples, Videos, GameComponents and Articles （页面存档备份，存于互联网档案馆）

* 查
* 论
* 编

人物|

| 創始人|

* 比尔·盖茨
* 保罗·艾伦

|

董事会|

* 薩蒂亞·納德拉（董事长兼首席执行官）
* 迪娜·杜伯倫
* 瑪利亞·克拉維
* David Marquardt（英语：David Marquardt）
* Charles Noski（英语：Charles Noski）
* Helmut Panke（英语：Helmut Panke）
* Mason Morfit（英语：Mason Morfit）
* John W. Stanton（英语：John W. Stanton）

高層領導團隊|

* 薩蒂亞·納德拉（執行長）
* Scott Guthrie（英语：Scott Guthrie）
* Amy Hood（英语：Amy Hood）（財務長）
* 特里·迈尔森
* 沈向洋
* 菲尔·斯宾塞（英语：Phil Spencer (business executive)）

公司副總裁|

* Gabe Aul（英语：Gabe Aul） （副總裁）
* 理查德·拉希德（高級副總裁）
* S. Somasegar（英语：S. Somasegar）（高級副總裁）

部門|

* 工程團隊
* 配件
* 行動
* 反網絡犯罪中心（英语：Microsoft Digital Crimes Unit）
* 車庫（英语：Microsoft Garage）
* 出版社
* 研究院
* .NET基金會
* Outercurve基金會（英语：Outercurve Foundation）
* 微软游戏
* Xbox游戏工作室

產品系列|

* 作業系統
* Windows

* 软件
* Office
* Servers
* Visual Studio
* 硬件
* HoloLens
* Surface
* Xbox
* 代号列表

網絡|

* Azure
* Bing
* Channel 9
* CodePlex
* 開發者網絡
* MSN
* Mixer
* Office.com
* OneDrive
* Outlook.com
* 商店
* TechNet

大會|

* Build
* Inspire
* MIX（英语：MIX (Microsoft)）
* PDC
* Ignite（英语：Microsoft Ignite）
* WinHEC

批評|

* Microsoft Windows捆綁銷售（英语：Bundling of Microsoft Windows）
* Clippy
* iLoo（英语：iLoo）
* Internet Explorer
* Microsoft Bob
* _NSAKEY（英语：_NSAKEY）
* Windows
* XP
* Vista
* 8
* 10
* Xbox 360

訴訟|

* 阿爾卡特-朗訊訴微軟（英语：Alcatel-Lucent v. Microsoft Corp.）
* 蘋果訴微軟（英语：Apple Computer, Inc. v. Microsoft Corp.）
* 歐盟微軟競爭案（英语：Microsoft Corp v Commission）
* 微軟訴Lindows（英语：Microsoft Corp. v. Lindows.com, Inc.）
* 微軟訴MikeRoweSoft
* 微軟訴Shah（英语：Microsoft Corp. v. Shah）
* 合众国诉微软案

收購（英语：List of mergers and acquisitions by Microsoft）|

* 6Wunderkinder
* 动视暴雪
* 收购案（英语：Acquisition of Activision Blizzard by Microsoft）
* Altamira Software（英语：Altamira Software）
* AltspaceVR（英语：AltspaceVR）
* aQuantive
* Azyxxi
* Mixer
* The Blue Ribbon SoundWorks（英语：The Blue Ribbon SoundWorks）
* Bungie
* Calista Technologies（英语：Calista Technologies）
* Colloquis（英语：Colloquis）
* Connectix（英语：Connectix）
* Consumers Software（英语：Consumers Software）
* Danger（英语：Danger Inc.）
* Farecast（英语：MSN Travel）
* FASA Studio
* Fast Search & Transfer（英语：Microsoft Development Center Norway）
* Fast Search & Transfer（英语：Fast Search & Transfer）
* 螢火蟲（英语：Firefly (website)）
* Forethought（英语：Forethought, Inc.）
* GIANT Company Software
* GitHub
* GreenButton（英语：GreenButton）
* Groove Networks（英语：Groove Networks）
* High Heat Major League Baseball（英语：High Heat Major League Baseball）
* Hotmail
* Jellyfish.com（英语：Jellyfish.com）
* 領英
* LinkExchange（英语：LinkExchange）
* Lionhead Studios
* Massive Incorporated（英语：Massive Incorporated）
* Mobile Data Labs（英语：MileIQ）
* Mojang Studios
* 诺基亚设备和服务
* Nuance Communications
* Onfolio
* Pando Networks（英语：Pando Networks）
* 感知像素
* PlaceWare（英语：PlaceWare）
* Powerset
* ProClarity（英语：ProClarity）
* Rare
* Revolution Analytics（英语：Revolution Analytics）
* ScreenTonic（英语：ScreenTonic）
* Secure Islands（英语：Secure Islands）
* Simplygon（英语：Simplygon）
* Skype
* Sunrise Atelier（英语：Sunrise Calendar）
* Winternals Software
* SwiftKey
* Winternals Software（英语：Sysinternals）
* Teleo（英语：Teleo）
* Telekinesys Research
* Tellme Networks（英语：Tellme Networks）
* Twisted Pixel Games
* Vermeer Technologies（英语：Vermeer Technologies）
* Visio Corporation（英语：Visio Corporation）
* Vivaty（英语：Flux (software)）（解散）
* VoloMetrix（英语：VoloMetrix）
* VXtreme（英语：NetShow）
* WebTV Networks
* Xamarin
* Yammer
* Yupi（英语：Yupi）
* ZeniMax Media

* 分类
* 共享資源
* 微軟主题
* 歷史

* 查
* 论
* 编

微軟應用程序開發介面與框架

圖形介面|

* 桌面窗口管理器
* DirectX
* Direct2D
* Direct3D
* D3DX
* GDI / GDI+
* WPF
* Silverlight
* WinRT XAML（英语：Windows Runtime XAML Framework）
* Windows色彩系统
* Windows Image Acquisition（英语：Windows Image Acquisition）
* Windows Imaging Component（英语：Windows Imaging Component）
* DXGI
* Windows高级光栅化平台（WARP）
* WinG标准

音樂與音效|

* DirectMusic
* DirectSound
* DirectX插件（英语：DirectX plugin）
* 跨平台音频创作工具（XACT）
* Speech API（英语：Microsoft Speech API）
* XAudio2（英语：XAudio2）

多媒體|

* DirectX
* Media Objects
* DXVA
* Xinput
* DirectInput
* DirectShow
* Image Mastering API
* Managed DirectX（英语：Managed DirectX）
* Media Foundation
* XNA
* Windows Media
* Video for Windows

Web|

* MSHTML
* RSS平台（英语：Windows RSS Platform）
* JScript
* VBScript
* 瀏覽器協助工具物件
* XMLHTTP
* SideBar小工具
* TypeScript

資料存取|

* 資料存取元件集
* ADO
* ADO.NET
* Entity Framework
* ODBC
* OLE DB
* 可扩展存储引擎
* WCF Data Services
* 同步框架（英语：Microsoft Sync Framework）
* Jet資料庫引擎
* 微軟XML剖析器
* OPC

網路|

* Winsock
* LSP
* Winsock内核（英语：Windows Vista networking technologies#Winsock Kernel）
* Windows筛选平台
* 網路驅動程式介面規格（NDIS）
* Windows Rally
* 后台智能传输服务（BITS）
* 對等通訊API（英语：Windows Vista networking technologies#Peer-to-peer communication）
* MSMQ（英语：Microsoft Message Queuing）
* MS MPI（英语：Microsoft Messaging Passing Interface）
* DirectPlay
* Active Directory Service Interface

通訊|

* 訊息API（英语：Messaging Application Programming Interface）
* 電話API
* WCF

管理|

* Win32控制台
* Windows Script Host
* WMI
* PowerShell
* 工作排程器
* Offline Files（英语：Windows Vista I/O technologies#Offline Files）
* 磁碟區陰影複製服務
* Windows Installer
* Windows錯誤回報（英语：Windows Error Reporting）
* 事件記錄器
* 通用日志文件系统

元件與模型|

* COM
* COM+
* ActiveX
* DCOM
* .NET框架

函式庫|

* 框架类库
* MFC
* 活动模板库（ATL）
* WTL

驱动程序|

* WDM
* WDF
* KMDF
* UMDF
* WDDM
* NDIS
* UAA
* BDA（英语：Broadcast Driver Architecture）
* VxD

安全性|

* Crypto API
* CAPICOM
* Windows CardSpace
* 数据保护API
* 安全支持提供者接口（SSPI）

.NET|

* ASP.NET
* ASP.NET AJAX
* ADO.NET
* Remoting
* Silverlight
* 任务并行库（英语：Task Parallel Library）（TPL）
* WCF
* Windows CardSpace
* WPF
* WF
* Core家族
* .NET Core
* ASP.NET Core
* Entity Framework Core
* ASP.NET Core MVC

软件工廠|

* EFx Factory（英语：EFx Factory）
* Enterprise Library（英语：Microsoft Enterprise Library）
* 複合使用者介面（英语：Composite UI Application Block）
* CCF（英语：Microsoft Customer Care Framework）
* CSF（英语：Microsoft Connected Services Framework）

行程間通訊|

* MSRPC（英语：Microsoft RPC）
* 動態資料交換（DDE）
* Remoting
* WCF

可協助性|

* Active Accessibility（英语：Microsoft Active Accessibility）
* 使用者介面自動化（英语：Microsoft UI Automation）

文字與多語系支援|

* DirectWrite
* 文本服务框架（英语：Text Services Framework）
* 文本对象模型（英语：Text Object Model）
* 输入法编辑器
* 語言介面套件（英语：Language Interface Pack）
* 多語系使用者介面（英语：Multilingual User Interface）
* Uniscribe

遊戲開發|

* Direct3D
* D3DX
* DirectSound
* DirectInput
* DirectPlay
* DirectMusic
* Managed DirectX（英语：Managed DirectX）
* XNA

规范控制数据库：各地 |

* 德国

|

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板