home

SpriteBatch uitgelegd

Dit artikel is bedoeld om het werken met de XNA class genaamd
SpriteBatch uit te leggen en zoveel mogelijk voorbeelden te laten zien mbt. het werken met deze class. De SpriteBatch class is een groep van Sprites welke met dezelfde settings kan worden weergegeven. Ook al is het weergeven van een enkele Sprite net zo goed mogelijk, is het met SpriteBatch dus mogelijk meerdere Sprites op een redelijk effectieve wijze weer te geven.

reference : Microsoft.Xna.Framework.Graphics.SpriteBatch

Stap 1) declareren van een SpriteBatch variabele

Als er een nieuw XNA project wordt aangemaakt door de Microsoft visual C# IDE is er in de Game1.cs reeds een SpriteBatch variabele gedeclareerd, hierdoor kun je er direct mee aan de slag. Toch is het vaak nodig om meerdere SpriteBatch variabelen te gebruiken die moet je dan vanzelfsprekend zelf declareren.

//declaratie SpriteBatch variabele
SpiteBatch spriteBatch;

Stap 2) SpriteBatch object toewijzen aan variabele

Na het declareren van een variabele van het type SpriteBatch dient nu een object gecreeerd te worden van de class SpriteBatch dit gebeurt door het gebruik van het new keyword samen met de zogenaamde constructor methode van deze class, een constructor methode heeft dezelfde naam als de class zelf en zorgt ervoor dat de betreffende variabele gebruik kan maken van de class (in dit geval dus de SpriteBatch class). De argumenten welke in een constructor methode moeten worden meegegeven hangt af van de opbouw van een class en is dus steeds verschillend.

//voorbeeld SpriteBatch object toewijzen aan variabele in
// de LoadContent methode van de Game1 class

protected override void LoadContent(
{

spriteBatch = new SpriteBatch(GraphicsDevice);

}

Uit bovenstaand voorbeeld kun je zien dat de SpriteBatch constructor 1 argument behoeft van het type GraphicsDevice, dit is nodig om het nieuwe object aan het GraphicsDevice te koppelen, hierdoor weet het GraphicsDevice van het bestaan van ons nieuw SpriteBatch object genaamd spriteBatch, verder is het zeer van belang te letten op het gebruik van hoofdletters tenminste als dit niet duidelijk is. de XNA class heet SpriteBatch ons nieuw object heet spriteBatch (zie het verschil !).

Mocht je je afvragen waar GraphicsDevice opeens vandaan komt lees dan ook even dit ; Elke Game1 class in een XNA project erft van een class genaamd Game van het XNA Framework, hierdoor kun je in de hoofdclass van je game (standaard Game1, maar je kunt ook een eigen naam bedenken, als je wilt). Dit erven van de Game class kun je terug vinden bovenin je class declaratie want daar staat het volgende,

public class Game1 : Microsoft.Xna.Framework.Game

hierdoor kunnen we direct gebruik maken van alle (public) eigenschappen en methodes van de XNA Game class, een van deze eigenschappen is (inderdaad) GraphicsDevice welke bijne even logisch het Graphicsdevice teruggeeft van je XNA Game. Ok nu weer verder.

Stap 3) SpriteBatch object gebruiken

Ok na een best lange uitleg wordt het tijd om dat nieuwe object van de class SpriteBatch eens te gaan gebruiken om in een game opzet te kunnen gaan gebruiken. het nieuw object spriteBatch kan nu alle (public) eigenschappen en methodes van de SpriteBatch class gebruiken immers.


//spriteBatch weergeven op scherm in de Draw methode van Game1

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);

}

Als je bovenstaand voorbeeld wilt uitproberen cq. debuggen krijg je een foutmelding, dat is op zich niet erg van van debug fouten leer je veel. De variabele Texture is niet gedefineerd immers ?, een Texture dient eerst nog gemaakt te worden dus om dit te gaan doen kun je het beste eerst het volgende artikel even doornemen :

Texture2D Class

Als je de variabele Texture met succes hebt aangemaakt kun je als het goed is een afbeelding op het scherm zien.

SpriteBatch Begin()

Zoals in bovenstaand voorbeeld duidelijk is geworden wordt er alvorens er iets naar het scherme wordt gestuurd steeds eerst gebruik gemaakt van de methode Begin() van de SpriteBatch class, dit geeft XNA een seintje dat er met een spriteBatch object iets gedaan dient te worden, het is een soort voorbereiding op dat wat komen gaat het daadwerkelijk iets naar het scherm schrijven.

Je begint in de Draw methode dus altijd met een Begin() methode van de Spritebatch class, op zich eenvoudig natuurlijk derhalve zijn er meer van 1 Begin() methodes gedefinieerd in deze XNA class. Van de meest eeenvoudige (zie voorbeeld hierboven) tot wat meer specifieke manieren om XNA duidelijk te maken hoe de betreffende data op het scherm dient te worden weergegeven.

Begin(), wat specifieke mogelijkheden

1) spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

hierdoor kun je transparante kleur in bijvoorbeeld een .png afbeelding
gebruiken.