1.3.2 Upate和Draw

在开发XNA游戏时,需要了解一个很重要的概念,就是游戏的刷新率是多少。通俗地说,就是1秒钟Draw和Update函数被调用多少次。

只有弄清楚这个问题,才能控制2D游戏动画的播放速度。Windows Phone里XNA的刷新率默认为30 fp(s帧每秒),也就是说1秒钟Draw和Update要被调用30次。展开Game1函数,可以看到如下代码:

Public Game1()
 {
    Graphics= new GraphicsDeviceManager(this);
    Content.RootDirectory ="Content";
    //Frame rate is 30 fps by default for Windows Phone
    TargetElapsedTime = TimeSpan.FromTicks(333333);
}

其中有一段英文注释是“Frame rate is 30 fps by default for Windows Phone”,意思是Windows Phone的默认刷新率是30 fps。

把用LoadContent加载的2D纹理用Draw函数绘制出来。在添加了图片资源以后,就可以用Texture2D这个对象在XNA中进行处理了,如图1-9所示。代码如下:

Texture2D loadingTexture;
loadingTexture =Content.Load<Texture2D>("UI/loading");

图1-9 加载loading图片纹理

这样就将loading.png这个纹理加载到loadingTexture对象中,接下来,只需要在Draw函数中用SpriteBatch把纹理绘制出来:

spriteBatch.Draw(loadingTexture,new Vector2(0,0),Color.White);

相关代码如图1-10所示。

图1-10 绘制loading图片

在Update函数中改变2D纹理的位置来左右移动loading图片,代码如下:

int PointX,changeX;
protected override void Update(GameTime gameTime)
{
    if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
      this.Exit();
    if(PointX<=0)
    {
      changeX=1;
    }
    else if(PointX>=800)
    {
      changeX = -1;
    }
    PointX += changeX;
    base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    spriteBatch.Draw(loadingTexture,new Vector2(PointX,0),Color.White);
    spriteBatch.End();
    base.Draw(gameTime);
}

然后,启动模拟器,按【F5】键即可,最后在模拟器中的效果如图1-11所示。

图1-11 在Update函数里移动loading图片