De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Gameprogrammeren: Objecten en geheugen

Verwante presentaties


Presentatie over: "Gameprogrammeren: Objecten en geheugen"— Transcript van de presentatie:

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

2 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

3 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

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

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

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

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

8 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

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

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

11 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. }

12 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(…);

13 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

14 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.

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

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

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

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

19 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”)

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

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

22 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!"


Download ppt "Gameprogrammeren: Objecten en geheugen"

Verwante presentaties


Ads door Google