Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.

Slides:



Advertisements
Verwante presentaties
Het type int Tekenen met Java operatoren
Advertisements

Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoofdstuk 8 Objecten en klassen.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Consoletoepassing Variabelen Klassen
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Hoorcollege 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 3 Methoden om te tekenen.
Hoofdstuk 3 Tekenen en rekenen.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Graphics, input & more!.  Graphics  Input  Sound  … game loop?
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Game Object Structuren
Aanroep van een methode voert opdrachten uit in de body daarvan
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Gameprogrammeren: Char en String
Gameprogrammeren: Variabelen, declaraties en toekenningen
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
vandaag èn vrijdag deadline maandag 12 dec.
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Gameprogrammeren: Herhalingen
Gameprogrammeren: Properties
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Libraries, Platform Games
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Willekeurigheid en Herhaling
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Object Communication (Jewel Jam)
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Transcript van de presentatie:

Hoorcollege 3 Game assets, Invoer verwerken

Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731 WMaarten LoefflerMatthijs de RijkBBG 756 XHans PhilippiWouter RemijnBBG 061 YJeroen FokkerOlaf SchalkBBG 056 ZWolfgang HuerstKatinka KalkmanBBG 056 AlphaRonald PoppeSiemen KraaienbinkBBG 061 BetaRoland GeraertsMerle DelenBBG 656

Klasse-definitie 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

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

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

Het ‘this’ object Het ‘this’ object is het object dat we nu aan het bewerken zijn in de methode 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); } Je mag dus ‘this.’ schrijven voor elke member

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

Expressies

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! UPDATE DRAW LOADCONTENT

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

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

Sprites tekenen … public SpriteDrawing() { Content.RootDirectory = "Content"; graphics = new GraphicsDeviceManager(this); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); balloon = Content.Load ("spr_lives"); } Maak een SpriteBatch object Ballon sprite laden Stel de locatie van de sprites in Constructormethode

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;

Sprites tekenen … protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); spriteBatch.Draw(balloon, Vector2.Zero, Color.White); spriteBatch.End(); } Ballon tekenen LET OP: Tekenopdrachten altijd tussen een `Begin’ en een `End’ aanroep!

Sprites tekenen Positie (0,0)

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() { spriteBatch = new SpriteBatch(GraphicsDevice); background= Content.Load ("spr_background"); balloon= Content.Load ("spr_lives"); } … De LoadContent actie Laden van sprites

Meerdere sprites … protected override void Update(GameTime gameTime) { int yposition = 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

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 ("snd_music"); MediaPlayer.Play(music); MediaPlayer.Play(Content.Load ("Music"));

Geluidseffecten Gebruik de volgende `using’ voor geluidseffecten: Geluidseffect laden: Geluidseffect afspelen: using Microsoft.Xna.Framework.Sound; SoundEffect mySnd = Content.Load ("snd_scream"); mySnd.Play();

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

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

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’ Muisinvoer verwerken using Microsoft.Xna.Framework.Input;

Zodat de ballon aan de muispointer hangt – 1 membervariabele toevoegen: – LoadContent uitbreiden om oorsprong te berekenen: protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); balloon = Content.Load ("spr_lives"); background = Content.Load ("spr_background"); balloonOrigin = new Vector2(balloon.Width / 2, balloon.Height); } Andere oorsprong gebruiken Vector2 balloonOrigin, balloonPosition;

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(); } Andere oorsprong gebruiken Rotatie Oorsprong Schaal Spiegelen

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

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

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

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); } 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(); } Roterend kannon De hoek geven we mee als parameter.

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!

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 if (aantalPunten > 1000) Console.WriteLine("Jij bent wel heel erg goed bezig!"); Methode van KeyboardState

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!

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

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

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

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 ?

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

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

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

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;

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;

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

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… }

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

De volgende keer… …gaan we verder met Painter Hoofdstukken 7 & 8 uit het boek – Zelf methoden en klassen toevoegen

Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731 WMaarten LoefflerMatthijs de RijkBBG 756 XHans PhilippiWouter RemijnBBG 061 YJeroen FokkerOlaf SchalkBBG 056 ZWolfgang HuerstKatinka KalkmanBBG 056 AlphaRonald PoppeSiemen KraaienbinkBBG 061 BetaRoland GeraertsMerle DelenBBG 656