Texture2D Uitleg
In dit artikel zal ik proberen uit te leggen hoe deze xna class toe te passen is, en zoveel mogelijk voorbeelden te plaatsen mbt. het toepassen van Texture2D in xna game development
reference :Microsoft.Xna.Framework.Graphics.Texture2D
Stap 1) declareren Texture2D variabele
Om gebruik te kunnen maken van een class in c+ (en de meeste andere progammeertalen) . Moet er eerst een variabele van deze class gedeclareerd worden, deze variabele heeft dan het Type Texture2D.
//voorbeeld van een variabele declaratie van het type Textur2D
private Texture2D Texture;
deze variabele kan nu gebruikt worden als type Texture2D, in het voorbeeld is gebruik gemaakt van private, maar dat kan natuurlijk ook public of protected zijn, al naar gelang het gebruik van deze variabele
Stap 2) inladen afbeelding
Nu kun je een Texture afbeelding inladen in XNA, dit dient te gebeuren
in de LoadContent methode van de Game1.cs.
Let wel alvorens dit werkend te krijgen moet dit afbeeldingsbestand wel toegevoegd worden als Content in het XNA project, ga naar Solution explorer in visual c#, rechtsklik op de content map klik daarna op Add existing Item, zoek het gewenste Texture bestand op en klik het aan daarna op OK. Dit zorgt ervoor dat het afbeeldingsbestand bekend is
aan XNA waardoor deze het kan vinden en door de ContentManager laten verwerken.
Content > rechtsklik > Add Existing Item > zoek afbeelding > linksklik > ok
//voorbeeld inladen afbeelding in Texture2D variabele Texture.
protected override void LoadContent()
{
Texture = Content.Load<Texture2D>("TextureNaam");
}
Een andere manier om een afbeelding toe te wijzen is het gebruiken van de methode Texture2D.FromFile(GraphicsDevice graphicsDevice, string filename), hierdoor is het inladen van een texture afbeelding in feite nog eenvoudiger omdat je niet de afbeelding aan xna hoeft toe te wijzen middels het eerder genoemde Content map > Add Exisiting Item, xna kan nu het pad volgen naar het bestand om het te kunnen vinden. Dit is tevens ook soms weer wat lastig om omdat er nu gezocht wordt vanuit een map genaamd Debug in de betreffende project mappen, dus moet je er op letten dat je een pad vanuit deze map naar de afbeelding cq. texture specifieerd, daar anders het afbeeldingsbestand niet kan worden gevonden, dit kan een foutmelding opleveren. In dat geval moet je het pad aanpassen.
//voorbeeld inladen afbeelding met methode FromFile van de Texture2D
//class in de methode LoadContent van de Game1.cs
protected override void LoadContent()
{
Texture = Texture2D.FromFile(GraphicsDevice, "../../../Content/Bg1.jpg");
}
Zoals bovenstaand voorbeeld laat zien is het inladen van een afbeeldingsbestand als Texure2D in feite niet erg ingewikkeld te noemen. Toch kan het in het begin even wennen zijn aan deze materie. Aan te bevelen is dan ook om de diverse mogelijkeheden gewoon uit te proberen en uit te testen. Waarschijnlijk wordt het dan vanzelf allemaal wel wat duidelijker.
De Texture2D class heeft meerdere methodes die FromFile heten, ik noem er nog een om even uit te proberen als voorbeeld. De anderen plaats ik misschien nog wel eens, in feite lijken ze best veel op elkaar alleen de argumenten verschillen waardoor ze wat veschillende mogelijkheden bieden, het onderstaande voorbeeld heeft als extra mogelijkheid dat je de afmeting kunt aanpassen van de texture, dus zonder de afbeelding te hoeven aanpassen
//voorbeeld gebruik andere methode FromFile van de Texture2D class
protected override void LoadContent()
{
Texture = Texture2D.FromFile(GraphicsDevice, "../../../Content/test.png", 100, 100);
}
Texture2D ingeladen en dan ?
Als het inladen van een Texure2D steeds beter lukt zou het natuurlijk mooi zijn als we die eens zouden kunnen gaan zien in de game, het is dan ook vanzelfsprekend dat ik dit in dit artikel ook even laat zien in zijn meest eenvoudige vorm, dan is er tenminste een resultaat waardoor er iets op het scherm komt.
Een Texture2D variabele heeft nu eeen afbeeldingsbestand aan zich gebonden, toch kun je een Texture2D niet direct op het scherm laten weergeven. De Texture moet nog toegewezen worden aan een display object oftewel aan een object welke wel in staat is om op het scherm te worden weergegeven. Het meest gebruikte object hiervoor in XNA is een zogenaamde SpriteBatch object.
Als je goed hebt opgelet is er reeds een SpriteBatch variabele gedeclareerd toen het XNA project is aangemaakt kijk maar bovenin je Game1.cs we gebruiken deze variabele cq. SpriteBatch object om een
afbeelding (Texture) weer te geven op het scherm.
//voorbeeld weergeven Texture2D (meest eenvoudige vorm)
//declaratie reeds bovenaan Game1.cs
SpriteBatch spriteBatch;
Texture2D Texture;
//in LoadContent inladen van de afbeelding als Texture2D
protected override void LoadContent()
{
Texture = Texture2D.FromFile(GraphicsDevice, "../../../Content/Bg1.jpg");
}
//nu in de Draw methode van Game1.cs
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.Draw(Texture,new Rectangle(0,0,100,100),Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Texture2D resultaat
Als alles goed gegaan is zie je nu je texture op het scherm, eerst hebben we een Texture2D variabele gedeclareerd, bovenin de Game1 class, daarna in de LoadContent methode een afbeelding toegewezen aan het Texture2D object.
Daarna hebben we met gebruik van een SpriteBatch object een Texture2D op het scherm weergegeven. Al is dit misschien een eenvoudig voorbeeld toch geeft het aan dat het werken met XNA Game studio goed te begrijpen is mits het ook goed wordt uitgelegd. Ik heb mijn best gedaan dit in dit artikel te doen met betrekking tot het uitleggen van de XNA Texture2D class. Ik hoop dat je er wat aan hebt gehad. Ik zal zo spoedig mogelijk ook andere XNA classes proberen uit te leggen kijk hiervoor in de andere artikelen onder game-coding/XNA.