公共方法
|
Name |
Description |
|
Begin |
已重载,准备图形设备来绘制sprites |
|
Dispose |
已重载,直接释放这个对象的非托管资源 |
|
Draw |
已重载,添加一个sprite到要绘制的一堆sprite里(在屏幕上绘制一个sprite) |
|
DrawString |
已重载, 添加一个string到要绘制的一堆sprite里(在屏幕上绘制一个string) |
|
End |
清理sprites batch 并且将图形设备恢复到对应的Begin函数之前的状态 |
还有其他的一些继承自Object类的方法就不说明了.
Begin函数与End函数承对使用
有四个重载分别是:
SpriteBatch.Begin ()
SpriteBatch.Begin (SpriteBlendMode)
SpriteBatch.Begin (SpriteBlendMode, SpriteSortMode, SaveStateMode)
SpriteBatch.Begin (SpriteBlendMode, SpriteSortMode, SaveStateMode, Matrix)
这里只介绍最后一个,前面三个缺少的参数全部是默认值会说明
第一个参数SpriteBlendMode(混合模式)是一个枚举型可枚举的三个值分别是Additive AlphaBlend None
主要用来计算颜色的混合,这是2D游戏华丽贴图的关键之一。游戏中最常用的颜色表示法RGBA(即红绿蓝透明度表示),每个颜色占1byte,取值范围0-255,透明度0代表完全透明255代表不透明(默认值为255),黑色是0,0,0。
Xna中一个像素的颜色的计算公式是[新颜色=来源混合参数*来源颜色+目标混合参数*目标颜色] 」(NewColor = SourceBlend*SourceColor + DestBlend*DestColor)。来源指指的是我们准备画的像素,目标值指的是已经在buffer中将要绘制的颜色。
计算时使用标准化的RGBA值,即RGBA分别除以255取0到1之间的float。
AlphaBlend(透明度混合)是将来源的Alpha作为来源混合参数,将1-Alpha作为目标混合参数。
如果将要画的一个新的图形的Aplha值设置乘255不透明(标准化为1)此時新顏色=1*SourceColor + 0*DestColor,那么它将覆盖之前的像素颜色。
Additive(添加混合)是将来源的混合参数和目标的混合参数都设置成1,这样混合白色会没有变化,其他的颜色看上去会更加明亮,黑色会更加明亮如图1,DNF的魔法阵周遍是完全的黑色所以想过是直接显示了底层的ELLY图片。这要求美工作出的图片必须符合要求。
None(不混合)就是来源混合数为1,目标混合数为0。即后来的图像覆盖原有的图像。
第二个参数SpriteSortMode(绘制顺序)也是一个枚举类型,有五个值分别是BackToFront Deferred FrontToBack Immediate Texture
BackToFront(从后向前)越晚调用Draw方法的越早绘制,如果有设置深度的话0是前面 1时后面,数字大得先画,深度优先权大于被调用的顺序。
FrontToBack(从前向后)与BackToFront正好相反,越早调用Draw的越早绘制。
Deferred(延缓)不考虑深度,越早调用Draw的越早绘制。(默认值)
Texture(材质)与Deferred一样,但是对于相同深度不互相重叠的情况效率更高。
以上四种都是在调用End方法之后绘制。
Immediate(立即)调用完draw后马上绘制。
第三个参数SaveStateMode(保存状态模式)
当调用Begin的时候会设置许多的参数,而利用SaveStateMode可以将其初始化(None)然后必须重新对这些参数设置,也可以设置成SaveState不进行设置,但是会影响到效果。特别是CullMode这样的参数如果不进行适当的更改而保持不变的话,在3D中效果是很明显不一样的。
第四个参数Matrix(转换矩阵)可以是Begin到End之间的所有的Sprite和String进行适当的变换。如位移旋转缩放或者3D中深度的改变等。
End函数与Begin成对使用表明Begin结束。