2012年9月25日星期二

XNA Game 类方法执行顺序和移动的图片,Windows Phone 游戏开发

XNA Game 类方法执行顺序和移动的图片,Windows Phone 游戏开发

Game 类

XNA 中的 Game 类的作用有点类似于我们熟悉的 main() 函数,是一个很重要的类。在 XNA 4.0 中,每一个游戏都需要一个派生自 Game 的类。

public class Game1 :    Microsoft.Xna.Framework.Game{    // 这里省略了代码。}

默认情况下在新建 XNA 项目之后,再带继承自 Game 的名为 Game1 的类。

Initialize 方法

Game 类的 Initialize 方法会首先执行(在本文所提到的方法中),在这个方法中可以初始化一些与游戏相关的数据,比如读取玩家的游戏进度等。

在下面的代码中,我们定义了一个浮点类型的字段 position,用来保存图片的位置,并且在 Initialize 中将它初始化为 10。

private float position;protected override void Initialize ( ){    // TODO: 在此处添加初始化逻辑    this.position = 10;    base.Initialize ( );}

LoadContent 方法

接下来将执行的是 LoadContent 方法,在这个方法中,我们载入游戏所需要的各种资源,比如:纹理图片,音乐,字体等。

正如下面的代码所示,我们在 LoadContent 方法中读取了用于测试的图片,并将它保存在 textImage 字段中,以便我们在其它方法中访问。

private Texture2D textImage;protected override void LoadContent ( ){    // 省略了一些代码。    // TODO: 在此处使用 this.Content 加载游戏内容    this.textImage =        this.Content.Load<Texture2D> (        @"image/test"        );}

图片,我们已经在项目 sample-1Content 中添加。

Draw 方法

Draw 方法会在 LoadContent 执行之后反复执行(在平方测试游戏的过程中发现,Draw 方法会先于 Update 方法执行)。在这个方法中,需要将所有需要展示的内容绘制到屏幕上。

我们将已经读取过的图片通过 SpriteBatch 类绘制输出,其位置由 position 字段确定。

protected override void Draw ( GameTime gameTime ){    // 省略了一些代码。    // TODO: 在此处添加绘图代码    this.spriteBatch.Begin ( );    this.spriteBatch.Draw (        this.textImage,        new Vector2 ( this.position, this.position ),        Color.White        );    this.spriteBatch.End ( );    base.Draw ( gameTime );}

Update 方法

与 Draw 方法类似,Update 也会在 LoadContent 方法执行后,被反复调用。在这个方法中,我们需要对游戏的数据进行操作,比如改变位置,判断两个物体是否发生碰撞等。

在下面的方法中,我们调整了表示图片坐标的 position 字段,因此每一次 Update 被调用,图片的位置都会发生偏移,最后就有了图片被移动的效果。

protected override void Update ( GameTime gameTime ){    // 省略了一些代码。    // TODO: 在此处添加更新逻辑    this.position += 1;    base.Update ( gameTime );}

UnloadContent 方法

当游戏结束,或者设备发生了某种改变,需要重新载入资源的时候,将停止循环 Draw 和 Update,并调用 UnloadContent,之后将结束游戏或者重新调用 LoadContent。

在我们的示例当中,不需要对 UnloadContent 设置。

protected override void UnloadContent ( ){    // TODO: 在此处取消加载任何非 ContentManager 内容}

原文地址:http://throw.diandian.com/post/xna-execute-order


TAG: