[翻译]XNA 3.0 Game Programming Recipes之twelve

PS:自己翻译的,转载请著明出处
                                              3-2 图象的旋转,缩放,和反射
问题
    在绘制到屏幕之前你想要旋转,缩放和反射一个副图片。
解决方案
    Draw方法的不同超载被SpriteBatch类所提供(见以前的章节)允许你很容易这样做。
如何工作
    旋转/缩放/反射一副图象
    SpriteBatch.Draw方法有许多重载的方法。这里有最复杂的重载,以及可能的参数下一步将讨论:
 1 public void Draw(
 2     Texture2D texture,
 3     Vector2 position,
 4     Nullable<Rectangle> sourceRectangle,
 5     Color color,
 6     float rotation,
 7     Vector2 origin,
 8     Vector2 scale,
 9     SpriteEffects effects,
10     float layerDepth
11 )
    头两个参数,以及第四个参数,以前的章节已经讨论过的,因为他们指定的纹理,需要绘制和你想在左上角的图象定位于屏幕位置。
    该sourceRectangle参数可以绘制的只有一部分的图片到屏幕上。这是非常有用的,如果你有多个图像存储到一个单一的图象中,在3-3节有讨论。如果你想简单地显示整幅图像,您应该指定这个参数为null
旋转
    使用旋转参数,在你绘制到屏幕前开始旋转图象。你需要设定弧度,所以如果你想顺时针旋转图象20度,你可以指定MathHelper.ToRadians(20),它可以帮你转换。
注意:2*PI是360度,所以PI应该是180度。如果你想旋转20度,你同样可以指定MathHelp.PI/180*20.f作为一个参数。
      该origin参数让你指定你想把图象放在屏幕上的位置的这个点,用的是第一个参数实现的。默认情况下,此是(0,0) 。例如,如果您指定的(0,0)作为参数,图象的左上角象素将被放置在屏幕的左上角,如图象3-2的左上角

    如果你有一个64*64的图片和您指定的(0,0)作为屏幕的位置和(32,32)作为图片的初始位置,图象的中心点将被定位在屏幕的左上角,如图3-2中间的图象所示。
   如果您指定(32,32)作为参数,图象中的心地位定位在(32,32)屏幕坐标,如图在右上角。请注意,如左上的情况是一样的效果。
   更重要的是,作为你指定的图象的初始位置将会被作为旋转的初始状态。在左上的情况,指定(0,0)作为图象的初始位置,图象将会围绕这个旋转,如图3-2左下的所显示。如果你指定(32,32)作为图象的初始状态,图象将会围绕它的中心点旋转,如右下的图象所示。注意左下和右下的图象上的不同。
缩放
    在绘制到屏幕上之前,你想让你的图象变大/变下,你可以指定scale参数。默认情况下,缩放值是1,意思是图象用初始的尺寸绘制。因为这个参数以Vector2接受,你可以垂直或水平拉伸图象。列如,参数(0.5f,2.0f)是指定宽缩小一半,而高度放大2倍。
反射
    这effects参数允许你反射图象在水平和垂直方向。如果大多数,你可以用SpriteEffects.FlipHorizontally|SpriteEffects.FlipVertically指定,这如旋转图象180度是相同的效果。
层深度
    最后一个参数允许你指定图象放置在哪一层上,当多个图象绘制在彼此图片上时这个就非常有用了。你在下2节会学多更多的信息。
代码
   下面的示列代码能够在图象绘制到屏幕时展示所有默认的效果:
1 protected override void Draw(GameTime gameTime)
2 {
3     device.Clear(ClearOptions.Target|ClearOptions.DepthBuffer,Color.CornflowerBlue,1,0);
4     spriteBatch.Begin();
5     spriteBatch.Draw(myTexture,new Vector2(50,100),null,Color.White,MathHelper.ToRadians(20),new Vector2(32,32),new Vector2(0.5f,2.0f),SpriteEffects.FlipVectically,0);
6     spriteBatch.End():
7     base.Draw(gameTime);
8 }
      功能涵盖在这2节里,使你可以创建基于2D的游戏。对于一系列动手操作的教学课程,使用此功能只创建一个完整的二维游戏。

posted on 2009-07-24 09:35  一盘散沙  阅读(256)  评论(0编辑  收藏  举报

导航