如何在XNA中缩放精灵表

本文关键字:缩放 精灵 XNA | 更新日期: 2023-09-27 18:22:17

我决定在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;

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

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

欢迎提出任何建议!

如何在XNA中缩放精灵表

你是说你的spritesheet图像比屏幕大,还是其中的各个sprites都大?

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

如果是后者,则只需使用图像编辑器缩放子画面。

如果使用SpriteBatch,则可以指定源矩形(纹理坐标)和目标矩形(屏幕坐标),因此可以在其中进行缩放。