问题

你想编写一个新的XNA 3.0游戏。此外,默认的初始代码已经包含了一些方法,你想知道这些方法是做什么用的。

解决方案

打开一个新项目和大多数Windows程序是相同的。在XNA Game Studio 3.0中,打开File菜单,选择New→Project。

工作原理

打开XNA Game Studio 3.0 通过点击Start按钮并选择Programs打开XNA Game Studio 3.0,找到Microsoft XNA Game Studio 3.0,点击,选择Microsoft Visual Studio 2008 (或Microsoft Visual C# 2008 Express Edition,如果你安装的是免费版本)。

打开一个新XNA 3.0项目在XNA Game Studio 3.0中,打开File菜单并选择New→Project。在左边的列表中,Visual C#下面的XNA Game Studio 3.0默认是高亮的,如图1-1所示。在右边,选择Windows Game (3.0),给你的项目起一个好听的名称,点击OK按键。

1

图1-1 打开一个新XNA 3.0项目(Visual Studio 2008版本)

预定义方法

当开始一个新项目时,你发现代码文件中已经包含了一些代码。注释(显示为绿色)占据了50%的代码帮助你开始编程。等会你就会发现这些方法非常有用,因为它们节省了你处理基本内容的时间。例如,当你运行这个程序时,会获得一个空的窗口,这意味着你无需将时间浪费在编写窗口或处理窗口信息队列上。

下面讨论预定义的方法。

Game1构造函数

Game1方法只在运行项目的一开始调用一次。这意味着当这个方法(构造函数)被调用时内部组件还没有被初始化。添加在这里的唯一代码应该是GameComponent类的实例化(见教程1-6),这里你无法访问任何资源(诸如GraphicsDevice类),因为它们还没有被初始化。

Initialize方法

Initialize方法也只被调用一次,在所有内部初始化完成之后。这个方法可以放置初始化变量,诸如游戏中的物体的初始位置和初始速度等,你可以访问游戏对象的所有资源了。

Update方法

当运行程序时,XNA会以每秒60次的频率调用Update方法(或者说每隔0.0167秒)。更多的知识可参见教程1-6。所以Update方法中可以放置更新游戏逻辑的代码,可以是更新物体的位置,碰撞检测,在一个位置开始爆炸,增加得分等。还有,处理用户输入和更新相机/模型的矩阵也应该在这个方法中进行。

Draw方法

在这个方法中,你应该放置绘制场景的代码。它绘制所有的2D图像,3D物体,爆炸和显示当前得分等。默认情况下,Draw方法的调用频率与屏幕刷新率相同,这取决于屏幕或Zune设备,更多内容可参见教程1-6。

LoadContent方法

在游戏中你总要从磁盘加载素材(诸如图像,模型和声音等) 。要加速这个过程并拥有灵活性,XNA通过内容管道管理这个素材。应该在LoadContent方法中加载素材,这个方法在项目开始只被调用一次。如何将一张2D图像加载到XNA项目中的详细例子可参见教程2-1,其他类型的素材加载方法是相同的。

UnloadContent方法

如果游戏中使用的对象需要清除,理想的放置位置是在UnloadContent方法中,这个方法在游戏退出前被调用一次。

添加一个.fx HLSL文件

如果你想更深入一步在项目中添加一个HLSL文件,只需在 Solution Explorer找到Content,右击并选择Add→New Item,选择“Effect file,”并起一个名称。你会获得一些默认代码,可以用这本书中的其他代码扩展或替换这些代码。之后需要像其他素材一样导入这个文件:通过创建一个对应的变量并将这个文件连接到这个变量。将这个变量添加到Game类的顶部:

Effect myEffect;

然后在LoadContent 方法中将这个变量连接到代码文件上:

protected override void LoadContent() 
{
    myEffect = Content.Load<Effect>("effectFile");
}

注意:你必须将素材的名称改成你的HLSL文件的名称,本例中是effectFile。