2010-12-03 4 views
6

Ich bin ein Neuling in XNA nur für den Fall. Was ich versuche, ist eine Textur in einer anderen Größe als das Original zu laden, oder zumindest die Größe zu ändern. Ich sehe in einigen Orten, die ich verwenden können:Größe ändern und laden Sie ein texture2d in XNA

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

Aber ich habe auch gelesen, dass das Laden Texturen auf diese Weise die Contentmanager ignoriert, und dass ich mache den Job für den Garbage Collector schwieriger.

Was ist der richtige Weg, um ein Bild in beliebiger Größe mit dem ContentManager zu laden? Wenn das nicht möglich ist kann ich seine Größe proportional ändern, wie mit einem Zoom?

Kontext: Ich erstelle eine Platine von n x n Stück. Wenn n zu groß ist, brauche ich automatisch, dass die Stücke kleiner werden.

+0

Joe's Antwort ist richtig. Außerdem: Es gibt keinen Unterschied zum Garbage Collector, ob Sie ContentManager verwenden oder nicht. Es beeinflusst nur, wie Sie die Texturen entladen müssen, wenn das etwas ist, das Ihr Spiel benötigt (zB: wenn Sie zwischen den Levels wechseln). Werfen Sie einen Blick auf meine Antwort hier: http://stackoverflow.com/questions/4264995/how-do-i-unload-content-from-the-content-manager/4265786#4265786. –

Antwort

10

die Textur zu laden:

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

Um die Größe eines der Spritebatch Überlastungen verwenden, die „Skala“ 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); 

Wenn Sie XNA sind neu kommt, schlage ich vor, Sie lesen this short tutorial, und überprüfen Sie auch Education Catalog unter create.msdn.com

+0

danke !, es funktioniert genau so, wie ich will:) ... Jetzt über die Frage, ob oder nicht die Methoden, die ich erwähne, was denkst du ist sicher, oder seine Verwendung ist eine andere Sache? – 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

Willkommen bei Stack Overflow! Code-only-Antworten sind nicht sehr hilfreich. Bitte bearbeiten Sie Ihre Antwort, um zu erklären, warum Ihr Code das ursprüngliche Problem löst. –

Verwandte Themen