Gameprogrammeren: Objecten en geheugen

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 2 Hallo, C# !.
Advertisements

Hoofdstuk 8 Objecten en klassen.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
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.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
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.
Variabelen Part deux.. Variabelen week 3 0. Herhaling 1. De NullPointerException (p101) 2. Primitieven 3. Scope en levensduur van variabelen 4. Meerdere.
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”
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
Polymorphisme en Interfaces: inleiding
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.
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.
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.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Game Object Structuren
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
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
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Afsluiting
Gameprogrammeren: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Libraries, Platform Games
Gameprogrammeren: Recursie
Gameprogrammeren: Abstracte klassen
Willekeurigheid en Herhaling
Arjan Egges Paul Bergervoet Wouter van Toll
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)
Exceptions Exception:
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Gameprogrammeren: Arrays
Transcript van de presentatie:

Gameprogrammeren: Objecten en geheugen Arjan Egges Paul Bergervoet Wouter van Toll

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

Objecten en geheugen Built-in types in het geheugen: primitieven Numerieke typen (int, double, ...) Tekst (strings) Waarheidswaarden int i = 12; double pi = 3.14; 12 i 3.14 pi string s = "hallo, "; s += "Arjan"; "hallo, " s "hallo, Arjan" bool b = true; b = !b; true b false

Objecten en geheugen Wat is nu de waarde van i? public void keerTwee(int getal) { getal *= 2; } Wat is nu de waarde van i? Nog steeds 3, want de waarde wordt gekopieerd bij het doorgeven aan de keerTwee-methode! int i = 3; keerTwee(i);

Objecten en geheugen Typen die gebaseerd zijn op een klasse werken anders verwijzing! Texture2D … width height data cannonBarrel

Kopiëren of verwijzen? Bij een methode-aanroep worden: primitieven geheel gekopieerd objecten niet gekopieerd, alleen de verwijzing ernaar (Primitieven hebben een beperkte grootte; objecten kunnen heel groot zijn) Objecten kun je doorgeven tussen methoden Ook wel “(passing by) reference” genoemd Als je iets via zo’n reference verandert, verander je dus ook het oorspronkelijke object!

Kopiëren of verwijzen? Built-in types (int, double, float) Values Speciaal geval: string  “non-mutable” Object-types gedefinieerd door klassen References (verwijzingen) Object-types gedefinieerd door structs Values (!) Wordt gebruikt voor simpele datastructuren Voorbeelden: Vector2, Point, Color… (Verder weinig verschil tussen class en struct)

Opbouw van objecten Opbouw van object is gespecificeerd in de klasse Overgeërfd uit de Game-klasse class Painter { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D background, cannonBarrel; Vector2 barrelPosition, barrelOrigin; float angle; // methoden... } : Game Painter game IsMouseVisible Content GraphicsDevice spriteBatch barrelPosition barrelOrigin background cannonBarrel graphics angle

Opbouw van objecten Painter game geërfd van Game zelf gedeclareerd cs-simulatieobjecten

GraphicsDeviceManager Opbouw van objecten Painter game SpriteBatch graphics GraphicsDeviceManager spriteBatch background Texture2D barrelPosition 72 405 barrelOrigin 34 cs-simulatieobjecten angle cannonBarrel Texture2D

Voorbeeld: De Cannon-klasse Groepeer alle membervariabelen die bij het kanon horen class Cannon { Texture2D cannonBarrel; Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position; Vector2 barrelOrigin, colorOrigin; Color color; float angle; // methoden worden nog toegevoegd. }

Declaratie Declaratie reserveert geheugenruimte Voor een primitieve waarde Voor een object-waarde Voor een object-verwijzing zoals beschreven in struct Vector2 int x; x 5 x = 5; zoals beschreven in klasse SpriteBatch p Vector2 p; X 10 p = new Vector2(10,20); Y 20 SpriteBatch s; s s = new SpriteBatch(…);

Constructie van nieuw object new-expressie doet twee dingen: Geheugenruimte klaarzetten Constructormethode aanroepen Waarde is een verwijzing naar het nieuwe object, die je kunt opslaan Cannon cannon = new Cannon (…); cannon position cannonBarrel Cannon color … 72 405 Texture2D 255

Voorbeeld: de Cannon-constructor Parameter(s) van de constructormethode Geen return type! public Cannon(ContentManager Content) { this.cannonBarrel = Content.Load<Texture2D>("spr_cannon_barrel"); this.colorRed = Content.Load<Texture2D>("spr_cannon_red"); this.colorGreen = Content.Load<Texture2D>("spr_cannon_green"); this.colorBlue = Content.Load<Texture2D>("spr_cannon_blue"); this.currentColor = colorBlue; color = Color.Blue; barrelOrigin = new Vector2(cannonBarrel.Height, cannonBarrel.Height) / 2; colorOrigin = new Vector2(currentColor.Width, currentColor.Height) / 2; position = new Vector2(72, 405); } Member- variabelen krijgen een waarde.

Constructie van een nieuw object class Painter : Game { ... Cannon cannon; protected override LoadContent() spriteBatch = new SpriteBatch(GraphicsDevice); background = Content.Load<Texture2D>("spr_background"); } Membervariabele cannon = new Cannon(Content); Informatie doorgeven via parameters!

null Als een variabele (nog) nergens naar wijst, dan zeggen we dat de variabele null is: Dit kunnen we zelfs in condities gebruiken: Of korter: Cannon cannon; if (cannon == null) cannon = new Cannon(Content); null mapt naar de booleanwaarde false if (!cannon) cannon = new Cannon(Content);

null Je kunt variabelen ook weer terug op null zetten: Hiermee verwijder je een verwijzing, maar niet per se het object zelf Waarom niet? Er kunnen nog andere variabelen naar wijzen! cannon = null;

Meerdere verwijzingen Meerdere variabelen mogen naar hetzelfde object verwijzen Voorbeeld: elk object in je game laten wijzen naar de Game waar-ie in zit

Spelen met verwijzingen Wat gebeurt er per regel? cannon1 cannon2 … Cannon cannon1 = new Cannon(...); Cannon cannon2; cannon2 = cannon1; cannon1 = new Cannon(...); cannon2 = null; position cannonBarrel Cannon color … position cannonBarrel Cannon color … Geen verwijzingen meer! Wordt vanzelf een keer verwijderd (“garbage collection”)

Objecten verwijderen Een object wordt vanzelf een keer uit het geheugen verwijderd... ...zodra er geen verwijzingen meer naar bestaan

Objecten Object: groepje variabelen dat bij elkaar hoort 100 w 20 h h ! 255 r g b 3 aantal 199.95 prijs

Objecten Om een object te gebruiken, hoef je niet te weten uit welke variabelen het object bestaat Je hoeft alleen te weten welke methoden/properties het heeft "vraag niet hoe het kan..." "maar profiteer ervan!"