De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Gameprogrammeren: Overerving

Verwante presentaties


Presentatie over: "Gameprogrammeren: Overerving"— Transcript van de presentatie:

1 Gameprogrammeren: Overerving
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

3 Voortborduren op eerder gedaan werk
Veel dingen zijn hetzelfde tussen de klassen Cannon, PaintCan en Ball Bijna dezelfde membervariabelen Constructormethoden lijken op elkaar Draw-methode is soms helemaal hetzelfde! Dat moet handiger kunnen!

4 Subklassen class Painter : Game Painter is een subklasse van Game
Game is de superklasse van Painter Elk Painter-object is tevens een Game-object Een Painter-object is een bijzonder geval van een Game-object

5 Over-erving Objecten van een subklasse erven variabelen / methoden / properties van de superklasse Painter game IsMouseVisible Content GraphicsDevice Overgeërfd spriteBatch screen inputHelper random gameWorld graphics Zelf gedeclareerd

6 Een object uitbreiden Hoe kunnen we een object uitbreiden?
Meer variabelen toevoegen Extra methoden/properties toevoegen Bestaande methoden/properties veranderen/vervangen Hiervoor gebruiken we het keyword virtual in combinatie met override

7 Een object uitbreiden Voorbeeld: Painter als subklasse van Game
Variabelen toevoegen (spriteBatch, …) Methodes toevoegen (HandleInput) Methodes vervangen (Update, Draw, …) Ander voorbeeld: ThreeColorGameObject-klasse als basis voor alle objecten in Painter (Ball, PaintCan, Cannon)

8 de constructormethode
class ThreeColorGameObject { protected Texture2D colorRed, colorGreen, colorBlue; protected Texture2D currentColor; protected Vector2 position, velocity; protected Color color; public ThreeColorGameObject(Texture2D colorRed, Texture2D colorGreen, Texture2D colorBlue) this.colorRed = colorRed; this.colorGreen = colorGreen; this.colorBlue = colorBlue; Color = Color.Blue; position = Vector2.Zero; velocity = Vector2.Zero; } Toegang verlenen aan subklassen Parameters van de constructormethode

9 Protectiemechanisme public protected private
Iedereen mag het gebruiken protected Alleen subklassen mogen het gebruiken private Alleen de eigen klasse mag het gebruiken Mechanisme kun je gebruiken voor membervariabelen, methoden en properties

10 Protectiemechanisme In Painter: class Ball { ... protected float mass;
public Vector2 position; public float Mass { get { ... } } public void Update(); private void InterneMethode(); ... } In Painter: Ball ball = new Ball(...); float a = ball.mass; float s = ball.Mass; ball.position = Vector2.Zero; ball.Update(); ball.InterneMethode(); Nee, dat mag niet! Ja, dat mag! Ja, dat mag ook! En zelfs dat mag. Maar dit mag niet!

11 class ThreeColorGameObject { ...
{ ... public virtual void HandleInput(InputHelper inputHelper) { } public virtual void Update(GameTime gameTime) position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds; public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch) spriteBatch.Draw(currentColor, position, Color.White); = de methode mag vervangen worden in een subklasse Handige methoden voor game-objecten!

12 De klasse ThreeColorGameObject
class ThreeColorGameObject { ... public Vector2 Center { get { return new Vector2(currentColor.Width, currentColor.Height) / 2; } public Vector2 Position { get { return position; } public Color Color... Handige properties voor game-objecten!

13 De nieuwe Ball-klasse class Ball : ThreeColorGameObject
{ bool shooting; public Ball(ContentManager Content) : base(Content.Load<Texture2D>("spr_ball_red"), Content.Load<Texture2D>("spr_ball_green"), Content.Load<Texture2D>("spr_ball_blue")) } Speciale versie van ThreeColorGameObject… … namelijk met een extra membervariabele! Informatie doorgeven aan ThreeColorGameObject- constructormethode base wijst naar het huidige object alsof hij het type van de superklasse heeft!

14 Base versus this base this “base  this” Painter game IsMouseVisible
Content GraphicsDevice spriteBatch screen inputHelper random gameWorld graphics “base  this”

15 Een Ball-object maken Declaratie Geheugen reserveren Base-constructor
This-constructor Toekenning object aan variabele Ball b; b = new Ball(Content); Ball colorRed position velocity color colorBlue currentColor colorGreen shooting b 255 Texture2D Texture2D Texture2D false

16 Welke versie van HandleInput
Object-verwijzingen Omdat Ball ook een ThreeColorGameObject is, mag dit ook: Aanroepen van methode: Die van Ball! Dit effect noemen we polymorfisme ThreeColorGameObject b = new Ball(Content); Welke versie van HandleInput wordt nu aangeroepen? b.HandleInput();

17 deze methode komt uit klasse:
Virtual - Override A a = new B (); a . m( ); dit mag, als class B : A deze methode komt uit klasse: B als m virtual in A en override in B A anders

18 Voordelen van overerving
Algemeen: Je hoeft je code niet telkens te knippen/plakken... ...én later niet op meerdere plekken te veranderen Vastleggen van interface voor gebruik In dit voorbeeld: Uitbreidingen van ThreeColorGameObject kun je in alle subklassen gebruiken Bijvoorbeeld PaintCan : ThreeColorGameObject geeft “gratis” de property Center!

19 Superklassen in libraries
Texture2D : Texture Texture : GraphicsResource super- superklasse superklasse

20 “is een” Hiërarchie-ontwerp class Voertuig : Vervoermiddel
class Boot : Vervoermiddel Voertuig Vervoer- middel “is een” Boot

21 ondergrond gaat voor motorisatie
Hiërarchie-ontwerp Vervoer- middel Voertuig Boot Motor- voertuig Fiets boot Zeil- Vracht- wagen Stoom- boot Auto Motor- fiets ontwerpkeuze: motorfiets is meer motor dan fiets Vliegtuig ontwerpkeuze: ondergrond gaat voor motorisatie

22 Vooruitblik: abstract
abstract class Klasse waarvan je mag overerven, maar die je nooit mag/wilt instantiëren Mag ook abstracte methodes / properties hebben Die moet elke niet-abstracte subklasse dan invullen Syntax e.d. komt later nog aan bod ThreeColorGameObject is een goede kandidaat Game bevat altijd PaintCan, Ball, etc. en nooit een “gewone” ThreeColorGameObject


Download ppt "Gameprogrammeren: Overerving"

Verwante presentaties


Ads door Google