2012-02-01 3 views
1

Я решил сыграть с 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 для каждого спрайта, применяется ли масштабирование к исходному листу спрайта или просто к самому спрайту после того, как он нарисовал свою текстуру из листа спрайтов?

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

Любые предложения были бы очень желанными!

ответ

1

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

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

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

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

+0

Ну, спрайт - это фотография, и она может быть меньше экрана, и в этом случае я масштабирую ее (сохраняя пропорции), чтобы заполнить экран, или он может быть больше, и в этом случае я масштабирую его вниз. В любом случае я удостоверяюсь, что изображение заполняет экран (неважно, если одно измерение больше ширины или высоты экрана). Сами спрайты нужно продиктовать, разделяя размеры экрана, хотя (а не спрайты) .. но мне нравятся ваши предложения или исходные и целевые прямоугольники. У меня может быть игра с этим. –

+1

Я бы предложил создать новую текстуру с вашим масштабированным изображением spritesheet (я предполагаю, что WP7 может отображать разные цели рендеринга). Тогда вам не нужно будет делать масштабирование на исходных прямоугольниках (просто беспокоиться о позициях), что должно сделать вещи проще. –

+0

Если я беру исходное изображение, масштабирую и обрезаю его, могу ли я затем скопировать его в текстуру, хранящуюся в памяти и не сохраненную на самом деле? Я думаю, что на самом деле это будет намного проще, чем то, что пытается достичь на данный момент! –

 Смежные вопросы

  • Нет связанных вопросов^_^