De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Gameprogrammeren: Sprite sheets

Verwante presentaties


Presentatie over: "Gameprogrammeren: Sprite sheets"— Transcript van de presentatie:

1 Gameprogrammeren: Sprite sheets
Arjan Egges Paul Bergervoet Wouter van Toll

2 Overzicht: Penguin Pairs

3 Sprite sheets Strips vs. Sheets Strip is handiger met tekenen 
Soms is een strip te breed om in het videogeheugen te passen  Sheet kan meer sprites bevatten dan strip  Sheet is wat onhandiger om te tekenen 

4 Sprite strip tekenen in Jewel Jam
public override void Draw(GameTime gameTime, SpriteBatch s) { if (!visible) return; Rectangle source = new Rectangle(variation * sprite.Height, 0, sprite.Height, sprite.Height); s.Draw(sprite, GlobalPosition, source, Color.White); glitters.Draw(gameTime, spriteBatch); }

5 Nieuwe klasse SpriteSheet
SpriteSheet heeft een aantal rijen en kolommen Er is een ‘sheet index’ die aangeeft welk element van de sheet we willen tekenen. 4 kolommen 1 2 3 4 5 6 7 2 rijen

6 SpriteSheet class SpriteSheet { protected Texture2D sprite;
protected int sheetIndex; protected int sheetColumns; protected int sheetRows; protected bool mirror; public SpriteSheet(string assetname, int sheetIndex = 0) ... }

7 Sprite sheet instellingen
Bij het laden van een asset zijn er dan drie mogelijkheden: Het is een enkele sprite Het is een sprite strip Het is een sprite sheet Trucje: encodering in de filenaam! spr_help.jpg

8 String ‘ontleden’ in de constructor
sprite = PenguinPairs.AssetManager.getSprite(assetname); this.sheetIndex = sheetIndex; this.sheetColumns = 1; this.sheetRows = 1; string[] assetSplit = if (assetSplit.Length <= 1) return; string sheetNrData = assetSplit[assetSplit.Length - 1]; string[] colrow = sheetNrData.Split('x'); this.sheetColumns = int.Parse(colrow[0]); if (colrow.Length == 2) this.sheetRows = int.Parse(colrow[1]); Levert een array op van strings. Blijkbaar is het geen strip of sheet. sheet (rijen en kolommen)

9 Properties public int Width { get return sprite.Width / sheetColumns;
} public int Height return sprite.Height / sheetRows; Deel door het aantal kolommen voor de juiste breedte. Deel door het aantal rijen voor de juiste hoogte.

10 Meer properties public int NumberSheetElements {
get { return this.sheetColumns * this.sheetRows; } } public int SheetIndex get { return this.sheetIndex; } set if (value < NumberSheetElements && value >= 0) this.sheetIndex = value; = totaal aantal elementen Alleen toekennen als het mag.

11 SpriteSheet tekenen public override void Draw(SpriteBatch spriteBatch, Vector2 position, Vector2 origin) { int columnIndex = sheetIndex % sheetColumns; int rowIndex = sheetIndex / sheetColumns; Rectangle spritePart = new Rectangle(columnIndex * this.Width, rowIndex * this.Height, this.Width, this.Height); SpriteEffects spriteEffects = SpriteEffects.None; if (mirror) spriteEffects = SpriteEffects.FlipHorizontally; spriteBatch.Draw(sprite, position, spritePart, Color.White, 0.0f, origin, 1.0f, spriteEffects, 0.0f); } Bereken de juiste rij/kolom waarden.

12 SpriteGameObject klasse
protected SpriteSheet sprite; protected Vector2 origin; public SpriteGameObject(string assetname, int layer = 0, string id = "", int sheetIndex = 0) : base(layer, id) { if (assetname != "") sprite = new SpriteSheet(assetname, sheetIndex); else sprite = null; } public override void Draw(GameTime gameTime, SpriteBatch s) { if (!visible || sprite == null) return; sprite.Draw(spriteBatch, this.GlobalPosition, origin);

13 SpriteGameObject gebruiken
protected override void LoadContent() { ... gameWorld = new GameObjectList(); gameWorld.Add( new SpriteGameObject("spr_background_levelselect")); SpriteGameObject penguin = new 1, "penguin"); penguin.Position = new Vector2(500, 420); gameWorld.Add(penguin); }

14 SpriteGameObject gebruiken
protected void HandleInput() { inputHelper.Update(); if (inputHelper.KeyPressed(Keys.Escape)) this.Exit(); if (inputHelper.KeyPressed(Keys.F5)) SetFullScreen(!graphics.IsFullScreen); gameWorld.HandleInput(inputHelper); SpriteGameObject penguin; penguin = gameWorld.Find("penguin") as SpriteGameObject; if (inputHelper.KeyPressed(Keys.Left)) penguin.SheetIndex--; else if (inputHelper.KeyPressed(Keys.Right)) penguin.SheetIndex++; }


Download ppt "Gameprogrammeren: Sprite sheets"

Verwante presentaties


Ads door Google