您的位置:首页 > 其它

[翻译]XNA 3.0 Game Programming Recipes之twelve

2009-07-24 09:35 337 查看
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的游戏。对于一系列动手操作的教学课程,使用此功能只创建一个完整的二维游戏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: