图形特效与文字显示
摘要
使用 XNA Framework 设计游戏程序的时候可以利用 SpriteBatch 类别提供的功能显示游戏的内容供用户检视,SpriteBatch 类别提供了丰富的功能协助游戏程序绘制图画和文字,包括对所输出的图画和文字加入特殊的效果,例如放大/缩小、旋转、设定透明度、水平/垂直翻转、以及图层深度等游戏程序常常需要表现的效果。在这一篇文件中,我们将会为大家介绍利用 SpriteBatch 类别为游戏程序加上特殊效果的多种做法。
认识 SpriteBatch 类别
XNA Framework 支持的 SpriteBatch 类别可以协助游戏程序输出 2 维的图片和文字,并提供批次输出的功能,避免频繁地输出游戏的内容造成闪烁的现象。
[提示]
虽然以 XNA 为基础的 3D 游戏输出 3 维的图形内容时不需要依靠 SpriteBatch 类别提供的功能,但是当 3D 游戏需要提供文字的功能选单供用户选择的时候,还是需要使用到 SpriteBatch 类别提供的文字输出功能。
表 1 所示为 SpriteBatch 类别常用的属性
属性名称 | 说明 |
GraphicsDevice | 取得游戏程序所使用的 GraphicsDevic 类别的对象的属性。 |
表 2 所示为 SpriteBatch 类别常用的方法:
方法名称 | 说明 |
Begin | 宣告批次绘图的动作开始。 |
Draw | 绘制 2 维图案。 |
DrawString | 绘制文字。 |
End | 宣告批次绘图的动作结束,将从呼叫 Begin 方法之后绘制的所有内容输出到游戏窗口,并将 GraphicsDevice 的状态还原到呼叫 Begin 方法之前的状态。 |
SpriteBatch 类别的功能看似简单,但是负责绘制 2 维图案的 Draw 方法有高达7个不同的多载 (Overload) 版本,负责绘制文字的 DrawString 方法也有多达 6 个不同的多载版本,让游戏程序可以经由传入不同数量的参数,控制方法执行的结果,如果再加计列举型态的参数的内容值选择,就可以组合出各种繁复的变化,满足游戏程序就变更游戏程序内容的需求。
SpriteBatch 类别与图形特效支持
SpriteBatch 类别支持绘制 2 维图案的 Draw 方法一共有以下 7 个不同的多载版本:
SpriteBatch.Draw(texture, destinationRectangle, color)
SpriteBatch.Draw(texture, destinationRectangle, sourceRectangle, color)
SpriteBatch.Draw(texture, destinationRectangle, sourceRectangle, color,
rotation, origin, effects, layerDepth)
SpriteBatch.Draw(texture, position, color)
SpriteBatch.Draw(texture, position, sourceRectangle, color)
SpriteBatch.Draw(texture, position, sourceRectangle, color, rotation,
origin, scale, effects, layerDepth)
SpriteBatch.Draw(texture, position, sourceRectangle, color, rotation,
origin, scale, effects, layerDepth)
其需要用到的参数请参考表3的详细说明:
参数名称 | 说明 |
texture | 型态为 Texture2D 类别的参数,负责管理欲绘制的 2 维图案。 |
destinationRectangle | 负责描述欲绘制在游戏窗口上的物体的矩形。 |
color | 负责控制欲绘制的图形的色调的参数,传入 Color.White 表示不改变欲显示的物体的色调。 |
sourceRectangle | 指定欲用来取用来源对象的矩形。 |
scale | 图案放大/缩小的倍数。 |
rotation | 旋转角度。 |
origin | 旋转图形时所依据的圆心。 |
effects | 设定成 SpriteEffects.FlipHorizontally 表示要水平翻转图案,设定成 SpriteEffects.FlipVertically 表示要垂直翻转图案。 |
layerDepth | 图层深度。0 代表前景层,1 代表背景层,可以搭配呼叫 SpriteBatch 类别的 Begin 方法传入的 SpriteSortMode 参数控制是否要对欲绘制的内容依 layerDepth 的内容值排序。 |
position | 指定欲绘制的图案的左上角点坐标。 |
光是靠 SpriteBatch 类别的 Draw 方法的众多参数,就能够创造繁复的游戏效果,例如透过 color 参数设定图案的色调和透明度,透过 rotation 参数指定旋转图案的角度,利用 origin 参数设定图案旋转的圆心坐标,利用 effects 参数水平翻转或垂直翻转图案,利用 scale 参数指定放大/缩小图案的倍数,或是利用 layerDepth 参数设定图案要显示在那一个图层。
http://msdn.microsoft.com/zh-cn/windowsphone/gg570013.aspx