SpriteBatch详解——SpriteBatch.Begin 和 SpriteBatch.End
2012-08-29 22:36
267 查看
公共方法
还有其他的一些继承自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结束。
Name | [b]Description [/b] | |
Begin | 已重载,准备图形设备来绘制sprites | |
Dispose | 已重载,直接释放这个对象的非托管资源 | |
Draw | 已重载,添加一个sprite到要绘制的一堆sprite里(在屏幕上绘制一个sprite) | |
DrawString | 已重载, 添加一个string到要绘制的一堆sprite里(在屏幕上绘制一个string) | |
End | 清理sprites batch并且将图形设备恢复到对应的Begin函数之前的状态 |
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结束。
相关文章推荐
- SpriteBatch详解——SpriteBatch.Begin 和 SpriteBatch.End
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END详解
- XNA学习笔记——SpriteBatch.Begin的Matrix参数
- XNA中SpriteBatch.Begin()重载中的BlendState解析
- NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END详解
- XNA4.0中effect的使用变化以及spriteBatch begin的变化
- Unbalanced calls to begin/end appearance transitions for 报错源自tabbar
- sort函数、vector中begin()、end()和front()、back()的区别
- 【转载】va_start和va_end使用详解
- 理解Directx之BeginScene/EndScene
- Unbalanced calls to begin/end appearance transitions for <IDOOrderHomeViewController: 0x8da2960>.
- PAT (Advanced Level)1024. Palindromic Number (25) string的reverse() assign begin end rbegin rend
- Begin...end
- awk使用详解(三)变量、数字表达式、赋值运算符、BGGIN、END、Built-in 变量
- begin() & end() function demo
- 详解Tensorflow数据读取有三种方式(next_batch)
- C# 中 async/await 调用传统 Begin/End 异步方法
- WindowsBatch与LinuxShell比较[batchfile之for命令详解]
- Direct3D轮回:为D3D量身订做SpriteBatch类
- The end where I begin