Gameprogrammeren: Game Assets Arjan Egges Paul Bergervoet Wouter van Toll
Game assets Externe informatie die nodig is om een game uit te voeren Voornamelijk: Sprites Geluiden Hiervoor gebruiken we een uitgebreide versie van de game loop
De game loop (uitgebreid) LoadContent Assets laden Wordt eenmalig uitgevoerd Niet alle acties in de game loop hoeven ingevuld te worden! LOADCONTENT UPDATE DRAW
Sprites tekenen Methodes van de SpriteBatch-klasse: DrawString: Tekst op het scherm tekenen Draw: Sprites (plaatjes) op het scherm tekenen Begin: aanroepen vóór de eerste teken-actie End: aanroepen na de laatse teken-actie
Sprites tekenen using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; class SpriteDrawing : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D balloon; static void Main() SpriteDrawing game = new SpriteDrawing(); game.Run(); } SpriteBatch-object Variabele om de sprite in te bewaren
Stel de locatie van de sprites in Sprites tekenen … public SpriteDrawing() { Content.RootDirectory = "Content"; graphics = new GraphicsDeviceManager(this); } protected override void LoadContent() spriteBatch = new SpriteBatch(GraphicsDevice); balloon = Content.Load<Texture2D>("spr_lives"); Constructormethode Stel de locatie van de sprites in Maak een SpriteBatch-object Ballon-sprite laden
Sprites tekenen … protected override void Draw(GameTime gameTime) { LET OP: Tekenopdrachten altijd tussen een ‘Begin’- en een ‘End’-aanroep! … protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(balloon, Vector2.Zero, Color.White); spriteBatch.End(); } Ballon tekenen
Sprites tekenen Positie (0,0)
sprite is de linkerbovenhoek! Sprites tekenen De oorsprong van de sprite is de linkerbovenhoek!
Meerdere sprites using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; class FlyingSprites : Game { static void Main() FlyingSprites spel = new FlyingSprites(); spel.Run(); } Texture2D balloon, background; Vector2 balloonPosition; … Membervariabelen voor de sprites Membervariabele voor de ballonpositie
Meerdere sprites protected override void LoadContent() { De LoadContent actie protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); background= Content.Load<Texture2D>("spr_background"); balloon= Content.Load<Texture2D>("spr_lives"); } … Laden van sprites
Pas de ‘gamewereld’ aan Meerdere sprites … protected override void Update(GameTime gameTime) { int yposition = 480 - gameTime.TotalGameTime.Milliseconds / 2; balloonPosition = new Vector2(300, yposition); } ... Pas de ‘gamewereld’ aan
Meerdere sprites … protected override void Draw(GameTime gameTime) { spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); spriteBatch.Draw(balloon, balloonPosition, Color.White); spriteBatch.End(); } Tekenen van sprites Let op: de volgorde waarin je de sprites tekent is belangrijk!!
Meerdere sprites balloonPosition
Muisinvoer verwerken Uitbreiding van het vorige voorbeeld: een ballon die de muis volgt. Alleen nog 1 extra using nodig: … protected override void Update(GameTime gameTime) { MouseState mousePos = Mouse.GetState(); balloonPosition = new Vector2(mousePos.X, mousePos.Y); } ... Ophalen van de muis-‘toestand’ using Microsoft.Xna.Framework.Input;
Andere oorsprong gebruiken Zodat de ballon aan de muispointer hangt 1 membervariabele toevoegen: LoadContent uitbreiden om oorsprong te berekenen: Vector2 balloonOrigin, balloonPosition; protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); balloon = Content.Load<Texture2D>("spr_lives"); background = Content.Load<Texture2D>("spr_background"); balloonOrigin = new Vector2(balloon.Width / 2, balloon.Height); }
Andere oorsprong gebruiken Draw-methode aanpassen Manier 1: protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); spriteBatch.Draw(balloon, balloonPosition - balloonOrigin, Color.White); spriteBatch.End(); }
Andere oorsprong gebruiken Manier 2: protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); spriteBatch.Draw(balloon, balloonPosition, null, Color.White, 0.0f, balloonOrigin, 1.0f, SpriteEffects.None, 0); spriteBatch.End(); } Rotatie Oorsprong Schaal Spiegelen
Geluid en muziek Gebruik de volgende ‘using’ voor achtergrondmuziek: Nu kunnen we muziek afspelen door de volgende opdrachten aan te roepen: Of korter: using Microsoft.Xna.Framework.Media; Song music = Content.Load<Song>("snd_music"); MediaPlayer.Play(music); MediaPlayer.Play(Content.Load<Song>("Music"));
Geluidseffecten Gebruik de volgende ‘using’ voor geluidseffecten: Geluidseffect laden: Geluidseffect afspelen: using Microsoft.Xna.Framework.Sound; SoundEffect mySnd = Content.Load<SoundEffect>("snd_scream"); mySnd.Play();