Microsoft XNA

✍ dations ◷ 2025-12-01 14:51:20 #电子游戏研发,微软API,微软开发工具,Computing acronyms,Xbox 360,游戏引擎

Microsoft XNA ("XNA's Not Acronymed"),完全支持托管代码的运行环境,由微软提供用以帮助电脑游戏开发、电脑软件开发及管理的一些工具。XNA把游戏设计员从“反复刻版编程”中解放出来,还把游戏开发上的所有需要结合到一个系统之中。XNA 工具集在2004年3月24日在美国加州圣荷西市的游戏开发者大会首次亮相,第一个公开技术预览在2006年3月14日推出,最新版本3.0在2008年10月30日推出。

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开发。

XNA 的程序都是继承自Game class,它包含了所有重要的游戏组件,比如图形设备(Graphic Device)、窗口设置以及内容管理器,你也可以添加GameComponent class到你的Game class。XNA Framework 把所有用作游戏编程的低端技术封装起来,例如XNA提供了Effect(BasicEffect)类别来处理大部分绘图着色相关的工作,开发人员不需再理会“矩阵变量”相乘,只要指定对象的World、View、Projection即可,其相乘效果由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上。

首先,让我们看看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;

这里是很基本的名字空间使用,简介每个名称空间的用途。

  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的更新速度来跑动游戏,直到出现离开程序指令。

BasicEffect是XNA 内置的 Shader, 支持12种渲染模型,ContentPipeline根据xnb模型文件说明,设置模型的MeshPart的BasicEffect参数。

XNA中实现Shader很简单。对XNA程序来说,Shader是一个小程序,只要把shader文件(.fx)导入到Contents 即可,会自动生成素材(material)。

 technique Technique1 {     pass Pass1     {        VertexShader = compile  VertexShaderFunction();        PixelShader = compile  PixelShaderFunction();     } }

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

 effect = Content.Load<Effect>("MyShader");  effect.CurrentTechnique = effect.Techniques ;  effect.Begin();  foreach (EffectPass pass in effect.CurrentTechnique.Passes)  {    pass.Begin();  ...     pass.End(); } effect.End(); // 終止使用 effect

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

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)。

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

第一个XNA Game Studio Express 的beta版本首度于2006年8月30日提供下载,2006年11月1日有第二个版本推出。2006年12月11日微软首度提供正式版

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

XNA Game Studio 2.0 于2007年12月13日推出. XNA Game Studio 2.0Visual Studio 2005亦实现有相同的特色与功能 (包括免费的 Visual C# 2005 Express Edition)。

XNA Game Studio 3.0 (基于Visual Studio 2008) 支持Zune的游戏开发。beta版在2008年9月推出.2008年10月30日推出正式版. XNA Game Studio 3.0 目前可支持 C# 3.0, Visual Studio 2008之上还支持LINQ. 在XNA3.0中,SoundEffect可以不透过XACT也可以做到特效的处理。

XNA Game Studio 3.1于2009年6月11日推出。可支持 video playback, 并修正了Audio API, 还支持Xbox LIVE Party system 并且可以使用 Xbox 360 Avatars。

XNA Game Studio 4 最早2010年3月9日由 "Community Technical Preview" 在 GDC 上发布, 并于2010年9月16日完整推出.。XNA 4集成了Visual Studio 2010, 可支持Windows Phone 7 平台 (包括:3D API的硬件加速)。VertexDeclaration 在 XNA Game Studio 4.0中略有改变,另外SpriteBatch.Begin也可以配合pixel shader。

XNA架构素材管道(XNA Framework Content Pipeline)是一种可扩展的素材处理框架,素材(Content)是在Visual C# Express内进行管理。在添加素材时,需要选择工具(importer),例如: Autodesk FBX,.FX, .XAP,这些工具用于接收资料,FBX是一种转移3D(3D transport)文件格式,将其标准化(normalize)。

正式名称是 XNA Game Studio Professional, XDK Extensions 是 XNA Game Studio 附加,可用于发展Microsoft Xbox 360.

虽然已被世界上很多开发员采用,但XNA 并未能真正发挥的作用,例如使游戏编程更容易。这是因为他没有一些重要的功能如骨骼动画(Skeletal animation),对初学者而言还是比较复杂的编程。另一个问题是有人认为XNA 没让开发者有太多控制权,这使得大多数的大型游戏制件过还是用C++直接调用DirectX。

在程序编辑上,XNA 确实大幅改善了繁杂的程序设计。包括:资源回收系统、简易声音API, 与背景保护程序的冲突改善等。但是由于企业界已经投入大量心力在C++与DirectX上面,目前仍然鲜见有企业愿意针对新语言C# 还有新平台XNA 进行投资。

相关

  • 微生物学微生物学是研究微生物的一门学科。微生物包括病毒、原核生物和简单的真核生物。目前,微生物学的最主要工作是用生物化学和遗传学方法完成的。由于很多病原(像是造成植物病害的
  • 达那唑达那唑(Danazol)为一种用于治疗子宫内膜异位症、乳腺小叶增生、遗传性血管性水肿(英语:hereditary angioedema)及其他疾病的药物,主要经口服给药。达那唑具有雄性化的副作用,使其用
  • 马哈拉施特拉马哈拉施特拉邦(马拉提语:महाराष्ट्र,印地语:महाराष्ट्र,拉丁字母转写:mahārāṣṭra),位于印度中部,西邻阿拉伯海,与印度卡纳塔克邦、特伦甘纳邦、果阿邦、古吉
  • 硫酸二乙酯硫酸二乙酯是硫酸与两分子乙醇形成的硫酸酯。为无色油状液体,有薄荷香。不溶于水,溶于乙醚和乙醇。遇水缓慢分解,热水中剧烈分解为硫酸单乙酯。有毒。可能致癌。用作乙基化剂,用
  • 沙贝病毒亚属乙型冠状病毒属(学名:Betacoronavirus、β-CoVs)是冠状病毒亚科的四个属之一,为具有包膜的正链RNA病毒,许多本属病毒可造成人畜共通传染病,例如可造成感冒的人类冠状病毒OC43与人
  • 第二学生活动中心坐标:25°00′47″N 121°32′13″E / 25.013172°N 121.536837°E / 25.013172; 121.536837台湾大学第二学生活动中心位于台北市大安区罗斯福路四段,空间主要提供国立台湾大
  • 胎压侦测系统胎压侦测系统(英语:Tire-pressure monitoring system,简称TPMS)是一种安装在车辆上,用来侦测轮胎胎压的电子系统。此系统会即时侦测,并且以仪表、数位显示或是单纯以灯号或声音让
  • 苯并噻吩苯并噻吩(分子式:C8H6S),又称硫茚,是一种由苯环和噻吩环经   ] {\displaystyle {\rm {
  • 巨猎豹Sivapanthera pardinensis巨猎豹()是史前已灭绝的猫科动物,是现今猎豹的近亲。巨猎豹的生活模式及身体特征可能很像猎豹,唯一不同的是巨猎豹有狮子的体型。它们于冰河时期分布于
  • Beep Media PlayerBeep Media Player (BMP)是一个自由的音乐播放器,其建基于XMMS技术。BMP主要是将XMMS重写成GTK+ 2的接口,并加强对GNOME桌面环境的集成。就如XMMS,BMP的外表极像Winamp,而且支持