Как мне масштабировать спрайт лист в XNA? - PullRequest
1 голос
/ 01 февраля 2012

Я решил поиграть с XNA для Windows Phone 7, и для моей первой игры мне нужно взять изображение и разбить его на квадратные спрайты, чтобы изображение по существу превратилось в лист спрайтов. Исходное изображение, вероятно, будет слишком большим или маленьким для экрана, поэтому я сделал следующее, чтобы понять, как применить масштаб, чтобы он уместился на экране, но без каких-либо пропусков (так что одно измерение может выйти за пределы экран).

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 Ответ

1 голос
/ 01 февраля 2012

Вы говорите, что изображение вашей таблицы спрайтов больше, чем экран, или отдельные спрайты в нем?

Если это первое, я не думаю, что это имеет значение, так как вы когда-нибудь только нарисуете частьлист (т.е. ваш индивидуальный спрайт).

Если последний, то просто масштабируйте таблицу спрайтов с помощью редактора изображений.

Если вы используете SpriteBatch, тогда вы можете указать исходный прямоугольник (текстурные координаты) и целевой прямоугольник (экранные координаты), чтобы вы могли выполнять там масштабирование.

...