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

xna中spritebatch.draw中的源矩形是什么,xna,Xna,SpriteBatch.Draw()方法中的源矩形参数的用途是什么 MSDN表示:一个矩形,用于指定纹理中的源texel(以texel为单位)。使用null绘制整个纹理。 这意味着什么?在单个纹理包含不同帧(动画纹理)的情况下,需要指定源矩形,以便可以从纹理绘制单个帧 i、 e。 查看此精灵表源矩形定义将显示的纹理区域。因此,如果您有一个40x40纹理,并且您的矩形为(0,0,20,20),则仅显示纹理的左上角。如果为矩形指定null,则将绘制整个纹理 当从精灵表(所有纹理的集合都放在一个更大的

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

MSDN表示:
一个矩形,用于指定纹理中的源texel(以texel为单位)。使用null绘制整个纹理。


这意味着什么?

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

i、 e。
查看此精灵表

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


当从精灵表(所有纹理的集合都放在一个更大的纹理中)进行绘制时,以及在图像处理程序中,这都很有用

源矩形的想法是通过将多个精灵排列到单个纹理中,让您实现性能优化和艺术家便利。这被称为“纹理图谱”或“精灵表”


(来源:)

。基本上,它可以减少纹理交换的数量。(因此,在我的示例中,如果只绘制一次动画角色,则使用精灵图纸不会提高性能。)

它还可以让您实现俗气的2D特效,例如在以下位置使用精灵“擦拭”:


(来源:)

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

如果为源矩形传入
null
,XNA将假定一个覆盖整个纹理的源矩形


指定要绘制的
原点
也以源矩形左上角的texel为单位进行测量。

“因此,在我的示例中,如果只绘制一次动画角色,使用精灵工作表不会提高性能。”使用spritesheet是否有可能提高RAM使用率和磁盘空间?@FreeAsInBeer没有提高RAM使用率或磁盘空间(任何显著的数量)。不过,您确实让我想起了一个我没有提到的有趣的问题:从磁盘加载单个大文件要比加载许多小文件快得多。(有很多方法可以将资产打包到一个文件中——sprite工作表是一个非常简单的文件。)请记住,改进是加载时间,而不是运行时间。与大多数性能优化一样,只有当您能够测量到问题存在时,才应该担心它。