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 内容 }