Skip to content

Monogame del 6, [SpriteBatch]

För att kunna rita upp många saker ofta och snabbt så använder man sig ofta av en teknik som kallas batchning. Det vill säga att buffrar upp många renderingar gruppvis och renderar dom i ett svep. Man kanske skulle kunna beskriva det som att man lägger en massa beställningar på saker man vill ha ritat och när man sedan gjort alla beställningar så skickar man iväg ordern och alla beställningar kommer hanteras direkt. Detta kommer med för och nackdelar som vi kommer märka framöver, men vi förbiser det för tillfället och accepterar att det är så.

SpriteBatch objektet efter att man skapat det har inte särskilt många funktioner i sig och det är ännu färre vi kommer använda oss av.
Följande funktioner kommer vi använda oss av och gå igenom idag, resten är antingen självförklarand eller inget vi någonsin kommer använda oss av.

Begin();
End();
Draw();
DrawString();

Låt oss titta lite närmare på Draw idag, så tar vi dom andra en annan dag.

  1.  
  2.  
  3.     spriteBatch.Draw(Texture2d, Rectangle, Color);
  4.  
  5.  

Draw i sin enklaste form, Har anger du en textur som ska ritas och en rektangel som beskriver vart på skärmen texturen ska ritas och sist vilken färg som ska blandas in här. Nästan alltid kommer du vilja välja Color.White här men det är ett enkelt sätt att kunna göra enkla effekter på texturen. Som tex att göra den transparent eller blinka rött för skada.

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Vector2, Color);
  4.  
  5.  

I det närmsta lika, skillnaden ligger i att du här anger en Vecktor2 istället för en rektangel. Här kan du inte ange hur hög eller bred texturen ska vara när du ritar så nu ritas texturen ut i sin orginal storlek.

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Rectangle, Rectangle, Color)
  4.  
  5.  


Nu har vi fått en ny parameter, den första rektangeln anger vart på skärmen texturen ska ritas, samma som tidigare. Den andra rektangeln anger vilken del av texturen som ska ritas. Det här möjliggör att vi kan ska animationer.

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Vector2, Rectangle, Color)
  4.  
  5.  

Ingen skillnad här förutom att vi ritar den utklippta texturen med en vektor position istället för en rektangel.

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Rectangle, Rectangle, Color, float, Vector2, SpriteEffects, float);
  4.  
  5.  


Nu fick vi lite nya parameter igen, alla fram till color känner vi igen sedan tidigare. Därefter kommer en float som anger rotation i radianer. Med den kan vi alltså rotera våran textur. nästa parameter är en vector2 position som anger runt vilken punkt som texturen ska roteras.

Det kanske inte alltid är så att man vill att texturen ska roteras runt sig själv utan istället att den ska rotera runt något annat objekt. Så som månen roterar runt jordklotet. Här kan vi alltså justera den parametern.

SpriteEffect är en enum med val för att spegelvända och göra texturen uppochner.

Sista parametern har med djupsortering att göra, den hoppar vi över idag så den kräver lite annan förberedelse för att fungera.

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Vector2, Rectangle, Color, float, Vector2, SpriteEffects, float);
  4.  
  5.  


Samma som ovan fast med vector2 som position istället för rektangel som tidigare

  1.  
  2.  
  3.     SpriteBatch.Draw(Texture2d, Vector2, Rectangle, Color, float, Vector2, Vector2, SpriteEffects, float);
  4.  
  5.  


Den sista överlagrade funktionen ser ut så här. position med vector2 ( den här gången har vi ingen rektangel som tidigare) istället har vi fått en ny vecktor2 parameter innan SpriteEffects där vi kan påverka bredden och höjden på texturen istället.

Det var allt Draw funktionen hade att erbjuda i spritbatchen.

Nästa gång tänkte jag att vi skulle skapa något med det vi lärt oss så här långt. Kanske något litet spel..?

Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

No comments

Add Comment

You can use [geshi lang=lang_name [,ln={y|n}]][/geshi] tags to embed source code snippets.
Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options