Я решил сыграть с XNA для 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;
Но затем мне нужно создать спрайты из этого изображения, которые аккуратно заполняют экран сеткой. Я полагаю, что мой главный вопрос заключается в том, что, когда я назову свой метод draw для каждого спрайта, применяется ли масштабирование к исходному листу спрайта или просто к самому спрайту после того, как он нарисовал свою текстуру из листа спрайтов?
Если это последнее, я немного смущен тем, как лучше всего масштабировать лист спрайта, прежде чем создавать свои отдельные спрайты. Я могу в конечном итоге сначала изменить размер изображения, чтобы точно соответствовать размерам экрана, чтобы облегчить жизнь, но это кажется немного тяжелым.
Любые предложения были бы очень желанными!
Ну, спрайт - это фотография, и она может быть меньше экрана, и в этом случае я масштабирую ее (сохраняя пропорции), чтобы заполнить экран, или он может быть больше, и в этом случае я масштабирую его вниз. В любом случае я удостоверяюсь, что изображение заполняет экран (неважно, если одно измерение больше ширины или высоты экрана). Сами спрайты нужно продиктовать, разделяя размеры экрана, хотя (а не спрайты) .. но мне нравятся ваши предложения или исходные и целевые прямоугольники. У меня может быть игра с этим. –
Я бы предложил создать новую текстуру с вашим масштабированным изображением spritesheet (я предполагаю, что WP7 может отображать разные цели рендеринга). Тогда вам не нужно будет делать масштабирование на исходных прямоугольниках (просто беспокоиться о позициях), что должно сделать вещи проще. –
Если я беру исходное изображение, масштабирую и обрезаю его, могу ли я затем скопировать его в текстуру, хранящуюся в памяти и не сохраненную на самом деле? Я думаю, что на самом деле это будет намного проще, чем то, что пытается достичь на данный момент! –