2010-12-03 19 views
6

Soy un novato en XNA por las dudas. Lo que trato de hacer es cargar una textura en un tamaño diferente del original, o al menos tener la posibilidad de cambiar su tamaño después. Veo en algunos lugares que puedo usar:Cambiar el tamaño y cargar una texture2d en XNA

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

Pero también leo que las texturas de carga de esta manera está ignorando el Director de Contenido, y que estoy haciendo el trabajo para el recolector de basura más difícil.

¿Cuál es la forma correcta de cargar una imagen en cualquier tamaño, utilizando ContentManager? Si eso no es posible ¿puedo cambiar su tamaño proporcionalmente, como usar un zoom?

Contexto: Estoy creando una tabla de n x n paces. Cuando n es demasiado grande, necesito que automáticamente las paces se vuelvan más pequeñas.

+0

La respuesta de Joe es correcta. Además: no hay diferencia para el recolector de elementos no utilizados, ya sea que use ContentManager o no. Solo afecta la forma en que debes descargar las texturas, si eso es algo que tu juego requiere (p. Ej .: al cambiar de niveles). Mire mi respuesta aquí: http://stackoverflow.com/questions/4264995/how-do-i-unload-content-from-the-content-manager/4265786#4265786. –

Respuesta

10

Para cargar la textura:

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

para cambiar su tamaño utilizar una de las sobrecargas SpriteBatch que se lleva a "escala" 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); 

Si usted es nuevo en XNA, le sugiero que lea this short tutorial, y también echa un vistazo a Education Catalog en create.msdn.com

+0

¡gracias !, funciona de la manera que quiero:) ... Ahora sobre la pregunta si utilizo o no los métodos que menciono, ¿qué crees que es seguro, o su uso es otra cosa? – mjsr

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

¡Bienvenido a Stack Overflow! Las respuestas de solo código no son muy útiles. Por favor, edite su respuesta para explicar por qué su código resuelve el problema original. –

Cuestiones relacionadas