首页 > Computer > XNA > XNA教程(一)
2009
02-15

XNA教程(一)

作者:Mike Fleishauer & clayman
本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
Blog:
http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn
special thanks to Mike Fleishauer ^_^


xna beta
发布已经快半个多月,终于有时间开始学习。以后的一段时间,打算把Mike Fleishauer的文章结合自己的理解,陆续出一些教程。
虽然我们将会由浅入深,逐步学习XNA,但在开始之前,你最好具备以下知识:熟悉C#, 有基本的程序设计经验,一定的图形学知识,包括3D2D坐标变换,纹理,光照等等,当然,如果你看过我原来翻译的managed dirctx kick start或者本来就熟悉MDX,那么学起来将会更加得心应手。
此外,你还需要以下工具:
1. Visual Studio Express 2005(注意,当前的XNA GSE还无法集成到VS pro中)
4. 当然,最好还有Mech Commander2的源代码Mech Commander2MS发行的一个游戏,现在开源了,大概800m,这个连接不是太稳定,多试几次)。
一切准备就绪了,但我们还需要弄清楚一些概念:
XNA / XNA Framework:他是一个托管的专门针对游戏开发(不仅仅是绘图)的函数库,基于Direct3D 9.net framework 2.0,可以同时在WindowsXbox360上运行。
Managed DirectX 2.0MDX 1.0的升级版,用于在.net framework 2.0下使用directx,但ms后来决定提供一个完全用于游戏开发的API,而不仅仅只是一套绘图函数库,因此, MDX 2.0整合到了XNA中,单独的MDX 2.0也成为了一个被取消的计划。
假设你从来没有使用过VC# Express,首先打开程序:

让我们来创建你的第一个游戏,选择 File -> new project

<

选择 Windows GameXNA)摸版,输入一个你喜欢的名字,然后单击OK
恭喜,你已经使用XNA创建了你的第一个windows游戏^_^
选择 Build-> Build Solution,然后按下F5(或者 Debug -> Start Debugging),现在可以看到你的程序在运行了:一个淡蓝色的窗口。
好吧,我承认它并不是很有吸引力,但作为nxa的“hello world”程序,它其实传达了许多很重要的概念。来看看模板生成的代码:
打开Program.cs文件:
using System;
namespace WindowsGame1
{
static class Program
{
///

/// The main entry point for the application.
///
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}
很简单,所有程序都需要一个入口点,这里就是程序开始运行的地方。在main方法中,我们创建了Game1类的一个实例,并且调用了它的run方法。
来看看类Game1,大部分工作都在这里完成。打开Game1.cs文件:
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Components;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
namespace WindowsGame1
{
///

/// This is the main type for your game
///
partial class Game1 : Microsoft.Xna.Framework.Game
{
public Game1()
{
InitializeComponent();
}
protected override void Update()
{
// The time since Update was called last
float elapsed = (float)ElapsedTime.TotalSeconds;
// TODO: Add your game logic here
// Let the GameComponents update
UpdateComponents();
}
protected override void Draw()
{
// Make sure we have a valid device
if (!graphics.EnsureDevice())
return;
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
graphics.GraphicsDevice.BeginScene();
// TODO: Add your drawing code here
// Let the GameComponents draw
DrawComponents();
graphics.GraphicsDevice.EndScene();
graphics.GraphicsDevice.Present();
}
}
}
这里的代码同样简单明了。Game1继承于Microsoft.Xna.Famework.GameGame类是一个游戏的基本骨架。这个对象把你从创建窗口、设置图形卡等其他琐碎设置的操作中解放出来,省略了大量每次编写游戏时都需要重复的代码。如果你熟悉MDX,那么这个类的功能相当于sdk sample framework中的Framework,搭建了游戏的基本框架,设置了许多属性。
首先,无论你否使用,代码自动添加了XNA的几个程序集的引用。一般来说,总是会用到这些程序集,因此保留这些代码。接下来,实现了一个默认的构造函数,Update方法以及Draw方法。
我们依次来看这几个方法:
protected override void Update()
{
float elapsed = (float)ElapsedTime.TotalSeconds;
UpdateComponents();
}
一旦程序开始运行之后,就会不停调用Update()方法。可以把这里认为是你的“game loop”。这里将有大量的事件将要发生,包

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。

留下一个回复