zoukankan      html  css  js  c++  java
  • [翻译]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的游戏。对于一系列动手操作的教学课程,使用此功能只创建一个完整的二维游戏。

  • 相关阅读:
    Scrum立会报告+燃尽图(Final阶段第一次)
    事后诸葛亮会议
    互评Beta版本
    Beta阶段基于spec评论作品
    Beta阶段基于NABCD评论作品
    作业 20181009-9 每周例行报告
    作业 20180925-1 每周例行报告
    作业 20180925-4 单元测试
    作业 20180925-6 四则运算试题生成
    作业 20180925 -2 功能测试
  • 原文地址:https://www.cnblogs.com/315358525/p/1529880.html
Copyright © 2011-2022 走看看