2010-12-03 4 views
6

Я новичок в XNA на всякий случай. То, что я пытаюсь сделать, это загрузить текстуру в другом размере от его оригинала или, по крайней мере, иметь возможность изменить свой размер после. Я вижу, в некоторых местах, которые я могу использовать:Изменение размера и загрузки текстуры2d в XNA

Texture2D.FromStream(GraphicsDevice graphicsDevice, Stream stream, 
       int width, int height, bool zoom) 

Но я также читал, что загрузка текстур в этом случае игнорирует ContentManager, и что я делаю работу сборщика мусора более трудным.

Что такое правильный способ загрузки изображения любого размера с помощью ContentManager? Если это невозможно, я могу изменить его размер пропорционально, например, с помощью масштабирования?

Контекст: Я создаю доску n x n races. Когда n слишком велико, я нуждаюсь в этом автоматически, а размеры становятся меньше.

+0

Ответ Джо правильный. Кроме того: нет никакой разницы с сборщиком мусора, независимо от того, используете ли вы ContentManager или нет. Это влияет только на то, как вы должны выгружать текстуры, если это то, что требуется вашей игре (например, при изменении между уровнями). Взгляните на мой ответ здесь: http://stackoverflow.com/questions/4264995/how-do-i-load-content-from-the-content-manager/4265786#4265786. – 2010-12-04 01:24:07

ответ

10

Для загрузки текстуры:

Texture2D tex = Content.Load<Texture2D>("somefile"); 

Чтобы изменить размер использовать один из SpriteBatch перегрузок, которые принимают «масштаб» http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.draw.aspx

float scale = .5f; //50% smaller 
SpriteBatch.Draw(tex, position, source, Color.White, rotation, scale, SpriteEffects.None, 0f); 

Если вы новичок в XNA, я предлагаю вам прочитать this short tutorial, а также выезд Education Catalog на create.msdn.com

+0

спасибо !, он работает именно так, как я хочу:) ... Теперь о вопросе, если вы используете или нет методы, о которых я упоминаю, что вы думаете в безопасности, или его использование - это другое? – mjsr 2010-12-03 20:55:22

0
Texture2D texture; 
protected override void LoadContent() 
     { 
... 
     texture = Content.Load<Texture2D>("Tank"); 
... 
     } 
protected override void Draw(GameTime gameTime) 
     { 
... 
     Rectangle destinationRectangle = new Rectangle(100, 100, 30, 10); 
     spriteBatch.Draw(texture, destinationRectangle, Color.White); 
... 
     spriteBatch.End(); 
     base.Draw(gameTime); 
     } 
+1

Добро пожаловать в переполнение стека! Кодовые ответы не очень полезны. Измените свой ответ, чтобы объяснить, почему ваш код решает исходную проблему. – 2017-01-18 22:13:04

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