Download de presentatie
De presentatie wordt gedownload. Even geduld aub
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++; }
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.