什么是xna中spritebatch.draw中的源矩形

时间:2011-03-04 04:53:07

标签: xna

SpriteBatch.Draw()方法中源矩形参数的用途是什么?

MSDN说:A rectangle that specifies (in texels) the source texels from a texture. Use null to draw the entire texture.

这是什么意思?

3 个答案:

答案 0 :(得分:15)

sourceRectangle的想法是允许您通过将多个精灵安排到单个纹理来实现性能优化和艺术家便利性。这被称为“纹理图集”或“雪碧表”。

http://andrewrussell.net/content/2010/12/Sprite-Sheet-Example.png

I explain why it is a performance optimisation in this answer。基本上它可以减少纹理交换的数量。 (因此,在我的插图中,如果您只绘制一次动画角色,则使用精灵表不会提高性能。)

它还可以让您实现俗气的2D特效,例如在:

中使用精灵“擦除”

http://andrewrussell.net/content/2010/12/Reveal-Animation-Example.png

texel或多或少与纹理中的像素相同(“纹理像素”,如果你愿意的话)。因此,当您绘制精灵时,您可以在纹理中指定精灵的左上角及其宽度和高度。 (就像在图像编辑器中选择它一样。)

如果您为源矩形传递null,XNA将采用覆盖整个纹理的源矩形。

您指定给origin的{​​{1}}也会以源矩形左上角的纹素来衡量。

答案 1 :(得分:0)

在您拥有包含不同帧(动画纹理)的单个纹理的情​​况下,您需要指定源矩形,以便可以从纹理中绘制单个帧。

即。 请查看此spritesheet here

答案 2 :(得分:0)

源矩形定义将显示的纹理区域。因此,如果您有40x40纹理,并且矩形为(0,0,20,20),则仅显示纹理的左上角。如果为矩形指定null,则将绘制整个纹理。

当从spritesheet(一组纹理全部放入一个更大的纹理)以及图像处理程序中绘制时,这会很有用。