De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Game Assets, Invoer Verwerken

Verwante presentaties


Presentatie over: "Game Assets, Invoer Verwerken"— Transcript van de presentatie:

1 Game Assets, Invoer Verwerken
Arjan Egges & Paul Bergervoet

2 Klasse-definitie Opsomming van methoden ieder bestaand uit opdrachten
class BasicXNAGame : Game { Color background; BasicXNAGame() background = Color.White; ... } ... Update(...) int red = gameTime…/…; background = new Color(red, 0,0); ... Draw(...) GraphicsDevice.Clear(background); Opsomming van methoden ieder bestaand uit opdrachten Beschrijving van objecten door declaraties van variabelen bewerken

3

4 Programma en geheugen opdrachten variabelen methoden objecten klasse
veranderen zijn gegroepeerd in zijn gegroepeerd in methoden objecten bewerken zijn gegroepeerd in hebben als type klasse klasse klasse

5 Maar bij welk object hoort
Het ‘this’ object Variabelen zijn gegroepeerd in objecten Maar bij welk object hoort ‘background’ dan? class BasicXNAGame : Game { GraphicsDeviceManager graphics; Color background; protected override void Update(GameTime gameTime) int red = gameTime.TotalGameTime.Milliseconds; background = new Color(red, 0, 0); }

6 Het ‘this’ object Het ‘this’ object is het object dat we nu aan het bewerken zijn in de methode Je mag dus ‘this.’ schrijven voor elke member class BasicXNAGame : Game { GraphicsDeviceManager graphics; Color background; protected override void Update(GameTime gameTime) int red = gameTime.TotalGameTime.Milliseconds; this.background = new Color(red, 0, 0); }

7 Waar maken we dat object?
class BasicXNAGame : Game { GraphicsDeviceManager graphics; Color background; static void Main() BasicXNAGame game = new BasicXNAGame(); game.Run(); } public BasicXNAGame() graphics = new GraphicsDeviceManager(this);

8 Expressies

9 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

10 De game loop (uitgebreid)
LoadContent Assets laden Wordt eenmalig uitgevoerd Niet alle acties in de game loop hoeven ingevuld te worden! LOADCONTENT UPDATE DRAW

11 Sprites tekenen De SpriteBatch klasse Begin End DrawString Draw
Voor het tekenen van tekst op het scherm Draw Voor het tekenen van sprites (plaatjes) op het scherm

12 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

13 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

14 Type Vector2 Het Vector2 type wordt gebruikt om vectoren in 2D te bewaren. Bijvoorbeeld: Vector2 positie = new Vector2(150.0f, 300.0f); positie = Vector2.Zero; positie = positie + new Vector2(300.0f, 300.0f); float x_waarde = positie.X; positie.Y = 350.0f;

15 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

16 Sprites tekenen Positie (0,0)

17 sprite is de linkerbovenhoek!
Sprites tekenen De oorsprong van de sprite is de linkerbovenhoek!

18 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

19 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

20 Pas de ‘gamewereld’ aan
Meerdere sprites protected override void Update(GameTime gameTime) { int yposition = gameTime.TotalGameTime.Milliseconds / 2; balloonPosition = new Vector2(300, yposition); } ... Pas de ‘gamewereld’ aan

21 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!!

22 Meerdere sprites balloonPosition

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

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

25 Commentaar Tekst voor de menselijke lezer, genegeerd door de compiler
Twee vormen: van /* tot */ van // tot einde regel

26 Commentaar Commentaar hoort de code te verduidelijken. Bijvoorbeeld:
…en niet: // Set the background color to olive green. GraphicsDevice.Clear(Color.Olive); // Pass the value Color.Olive to the Clear method of the graphics device. GraphicsDevice.Clear(Color.Olive);

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

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

29 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(); }

30 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

31 De Painter game Screenshot: Heeft een kannon dat de muispointer volgt

32 Roterend kannon Membervariabelen in de Painter klasse:
GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D background, cannonBarrel; Vector2 barrelPosition, barrelOrigin; float angle;

33 Roterend kannon LoadContent methode
protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); background = Content.Load<Texture2D>("spr_background"); cannonBarrel = Content.Load<Texture2D>("spr_cannon_barrel"); barrelPosition = new Vector2(72, 405); barrelOrigin = new Vector2(cannonBarrel.Height, cannonBarrel.Height) / 2; } Height

34 Roterend kannon Hoek uitrekenen in de Update methode:
protected override void Update(GameTime gameTime) { MouseState mouse = Mouse.GetState(); double opposite = mouse.Y - barrelPosition.Y; double adjacent = mouse.X - barrelPosition.X; angle = (float)Math.Atan2(opposite, adjacent); }

35 Roterend kannon Alles tekenen
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); spriteBatch.Draw(cannonBarrel, barrelPosition, null, Color.White, angle, barrelOrigin, 1.0f, SpriteEffects.None, 0); spriteBatch.End(); } De hoek geven we mee als parameter.

36 soms uitgevoerd worden!
Roterend kannon Stel we willen het kannon alleen draaien als de speler de ‘K’ toets ingedrukt houdt protected override void Update(GameTime gameTime) { KeyboardState k = Keyboard.GetState(); ... double opposite = mouse.Y - barrelPosition.Y; double adjacent = mouse.X - barrelPosition.X; angle = (float)Math.Atan2(opposite, adjacent); } De huidige toetsenbordstatus Dit stuk moet alleen soms uitgevoerd worden!

37 Keuzeopdracht We gebruiken ‘if’ (=als) om een opdracht conditioneel uit te voeren ‘if’ krijgt een conditie mee tussen haakjes Ander voorbeeld: if (k.IsKeyDown(Keys.K)) // doe iets Methode van KeyboardState if (aantalPunten > 1000) Console.WriteLine("Jij bent wel heel erg goed bezig!");

38 Toetsenbordinvoer verwerken
protected override void Update(GameTime gameTime) { KeyboardState k = Keyboard.GetState(); if (k.isKeyDown(Keys.K)) double opposite = mouse.Y - barrelPosition.Y; double adjacent = mouse.X - barrelPosition.X; angle = (float)Math.Atan2(opposite, adjacent); } Wordt alleen uitgevoerd als de K-toets ingedrukt is!

39 Keuzeopdracht Bij een enkele opdracht mag je de accolades weglaten:
Met een alternatief: if (score > 1000) Console.WriteLine("Geweldig, je krijgt 100 bonuspunten!"); if (score > 1000) Console.WriteLine("Je bent goed bezig!"); else Console.WriteLine("Waardeloos…");

40 Keuzeopdracht Meer dan 1 alternatief if (score > 1000)
Console.WriteLine("Je bent goed bezig!"); else if (score > 500) Console.WriteLine("Heel netjes."); else if (score > 100) Console.WriteLine("Tsja, dat kan beter!"); else Console.WriteLine("Dat is vrij waardeloos…");

41 Keuzeopdracht Mag je ook zo schrijven (bij uitzondering)
if (score > 1000) Console.WriteLine("Je bent goed bezig!"); else if (score > 500) Console.WriteLine("Heel netjes."); else if (score > 100) Console.WriteLine("Tsja, dat kan beter!"); else Console.WriteLine("Dat is vrij waardeloos…");

42 Vergelijk-operatoren
< kleiner dan <= kleiner dan of gelijk aan > groter dan >= groter dan of gelijk aan == gelijk aan != ongelijk aan x=5 x wordt 5 ! x==5 is x gelijk aan 5 ?

43 Expressies Expressie met een getal als waarde
2 * (lengte + breedte) type int value- Expressie met een tekst als waarde "Hallo " + persoon type string object- Expressie met een waarheid als waarde aantalLevens > 0 type bool value-

44 Bool expressies Vergelijken van waarden
x <= y Combineren van andere bool-expressies met logische operatoren && and || or ! not George Boole ( ) x<0 && y>0 ! (x==0 && y==0) x!=0 || y!=0

45 Hoek kannon alleen aanpassen nadat je geklikt hebt
protected override void Update(GameTime gameTime) { MouseState mouse = Mouse.GetState(); if (mouse.LeftButton == ButtonState.Pressed) double opposite = mouse.Y - barrelPosition.Y; double adjacent = mouse.X - barrelPosition.X; angle = (float)Math.Atan2(opposite, adjacent); }

46 Enumerated type Wordt gebruikt om een verzameling verschillende toestanden aan te duiden Bijvoorbeeld: En voor ButtonState (Pressed/Released): enum CharacterClan { Warrior, Wizard, Elf, Spy }; CharacterClan myClan = CharacterClan.Warrior; ButtonState someState = ButtonState.Released;

47 Enumerated type Nog een voorbeeld:
enum MonthType { January, February, March, April, May, June, July, August, September, October, November, December }; enum DayType { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; MonthType currentMonth = MonthType.February; DayType today = DayType.Tuesday;

48 Toggling/wisselen Actie eenmalig uitvoeren als de speler op een knop drukt Wanneer drukt de speler op een knop? 1: als de speler de vorige keer de knop nog niet had ingedrukt 2: als de speler nu de knop wel ingedrukt heeft

49 Vorige + huidige status
Twee MouseState membervariabelen: In de Update-methode: MouseState current, previous; protected override void Update(GameTime gameTime) { previous = current; current = Mouse.GetState(); // doe iets… }

50 Vorige + huidige status
Muisklik afhandelen: protected override void Update(GameTime gameTime) { previous = current; current = Mouse.GetState(); if (current.LeftButton == ButtonState.Pressed && previous.LeftButton == ButtonState.Released) double opposite = current.Y - barrelPosition.Y; double adjacent = current.X - barrelPosition.X; angle = (float)Math.Atan2(opposite, adjacent); }


Download ppt "Game Assets, Invoer Verwerken"

Verwante presentaties


Ads door Google