如何在XNA中缩放精灵表?

时间:2012-02-01 07:33:51

标签: c# sprite windows-phone-7.1 xna-4.0 sprite-sheet

我决定在Windows Phone 7上玩XNA游戏,在我的第一个游戏中,我需要拍摄一张图像并将其分割成方形精灵,因此图像基本上变成了精灵表。原始图像可能对于屏幕来说太大或太小,所以我已经完成了以下工作以确定如何应用比例以使其适合屏幕,但没有任何间隙显示(因此一个维度可能会超出屏幕)。

Texture = content.Load<Texture2D>(assetName);

var width = Texture.Bounds.Width;
var height = Texture.Bounds.Height;

var widthDifference = width - screenWidth;
var heightDifference = height - screenHeight;

if (widthDifference < 0 || heightDifference < 0)
{
   if (widthDifference < heightDifference)
      Scale = (float) screenWidth/width;
   else
      Scale = (float) screenHeight/height;
}
else
{
   if (widthDifference > heightDifference)
      Scale = (float) screenWidth/width;
   else
      Scale = (float) screenHeight/height;
}

if (Scale < 0)
   Scale = Scale*-1;

但是接下来我需要从这个图像中生成精灵,在网格中整齐地填充屏幕。我想我的主要问题是,当我在每个精灵上调用我的绘制方法时,缩放是否适用于原始精灵表,或者只是从精灵表中获取其纹理后的精灵本身?

如果是后者,我对在构建我的个人精灵之前如何最好地缩放精灵表感到困惑。实际上,我可能会首先调整图像大小以与屏幕尺寸完全匹配,以使生活更轻松,但这似乎有点沉重。

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

您是说您的spritesheet图片大于屏幕,或者其中的个人精灵是什么?

如果是前者,我认为这不重要,因为你只会画一部分表(即你的个人精灵)。

如果是后者,那么只需使用图像编辑器缩放spritesheet。

如果您使用的是SpriteBatch,那么您可以指定源矩形(纹理坐标)和目标矩形(屏幕坐标),这样您就可以在那里进行缩放。