SpriteBatch详解——SpriteBatch.Begin 和 SpriteBatch.End

来源:互联网 发布:7层网络协议 编辑:程序博客网 时间:2024/05/18 11:27

公共方法

 

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),黑色是000

Xna中一个像素的颜色的计算公式是[新颜色=来源混合参数*来源颜色+目标混合参数*目标颜色] 」(NewColor = SourceBlend*SourceColor + DestBlend*DestColor)。来源指指的是我们准备画的像素,目标值指的是已经在buffer中将要绘制的颜色。

计算时使用标准化的RGBA值,即RGBA分别除以25501之间的float

AlphaBlend(透明度混合)是将来源的Alpha作为来源混合参数,将1-Alpha作为目标混合参数。

如果将要画的一个新的图形的Aplha值设置乘255不透明(标准化为1)此時新顏色=1*SourceColor + 0*DestColor,那么它将覆盖之前的像素颜色。

Additive(添加混合)是将来源的混合参数和目标的混合参数都设置成1,这样混合白色会没有变化,其他的颜色看上去会更加明亮,黑色会更加明亮如图1DNF的魔法阵周遍是完全的黑色所以想过是直接显示了底层的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(转换矩阵)可以是BeginEnd之间的所有的SpriteString进行适当的变换。如位移旋转缩放或者3D中深度的改变等。

End函数Begin成对使用表明Begin结束。

原创粉丝点击