Arjan Egges & Paul Bergervoet

Slides:



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

Hoofdstuk 10 Overerving.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
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.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
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”
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Polymorphisme en Interfaces: inleiding
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.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Animatie & Game Physics
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Partial Classes, Enemies, Exceptions
Game Object Structuren
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
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: Willekeurigheid (Randomness)
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Gameprogrammeren: Recursie
Gameprogrammeren: Abstracte klassen
Willekeurigheid en Herhaling
Gameprogrammeren: Interfaces
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Object Communication (Jewel Jam)
Exceptions Exception:
Gameprogrammeren: Enemies in Tick Tick
Gameprogrammeren: Sprite sheets
Gameprogrammeren: Arrays
Transcript van de presentatie:

Arjan Egges & Paul Bergervoet Overerving Arjan Egges & Paul Bergervoet

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

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

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

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

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

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

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

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

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!

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!

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!

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!

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

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

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

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

Voordelen van overerving Je hoeft je code niet telkens te knippen/plakken Uitbreidingen van ThreeColorGameObject kun je in alle subklassen gebruiken Vastleggen van interface voor gebruik Als we de PaintCan-klasse laten overerven van ThreeColorGameObject gratis property Center!

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

Vervang de originele versie Ball Vervang de originele versie public override void HandleInput(InputHelper inputHelper) { if (inputHelper.MouseLeftButtonPressed() && !shooting) shooting = true; velocity = (inputHelper.MousePosition - position) * 1.2f; }

Andere methoden in de Ball klasse public override void Reset() { base.Reset(); position = new Vector2(65, 390); velocity = Vector2.Zero; shooting = false; } Roep de originele versie aan

Welke versie wordt hier Ball public override void Update(GameTime gameTime) { if (shooting) velocity.X *= 0.99f; velocity.Y += 6; } else Color = Painter.GameWorld.Cannon.Color; position = Painter.GameWorld.Cannon.BallPosition - Center; if (Painter.GameWorld.IsOutsideWorld(position)) Reset(); base.Update(gameTime); Welke versie wordt hier aangeroepen?

Omgaan met ‘game over’ Member variabelen in de GameWorld klasse: Texture2D background, gameover; Ball ball; PaintCan can1, can2, can3; Cannon cannon; int lives; Texture2D livesSprite; Game over overlay Bijhouden en tekenen aantal levens

HandleInput public void HandleInput(InputHelper inputHelper) { if (lives > 0) cannon.HandleInput(inputHelper); ball.HandleInput(inputHelper); } else if (inputHelper.KeyPressed(Keys.Space)) Reset(); Ander gedrag afhankelijk van het aantal overgebleven levens

Update public void Update(GameTime gameTime) { if (lives > 0) ball.Update(gameTime); can1.Update(gameTime); can2.Update(gameTime); can3.Update(gameTime); } Objecten alleen updaten indien speler nog levens heeft

Teken game over overlay public void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); ball.Draw(gameTime, spriteBatch); cannon.Draw(gameTime, spriteBatch); can1.Draw(gameTime, spriteBatch); can2.Draw(gameTime, spriteBatch); can3.Draw(gameTime, spriteBatch); for (int i = 0; i < lives; i++) spriteBatch.Draw(livesSprite, new Vector2(i * livesSprite.Width + 15, 20), Color.White); if (lives <= 0) spriteBatch.Draw(gameover, new Vector2(Painter.Screen.X – gameover.Width, Painter.Screen.Y - gameover.Height) / 2, Color.White); spriteBatch.End(); } Teken game over overlay

Geluidseffecten (finishing touch  ) In de Ball klasse: Membervariabele toevoegen: Effect laden in constructor: Afspelen bij afschieten: protected SoundEffect ballShot; ballShot = Content.Load<SoundEffect>("snd_shoot_paint"); if (inputHelper.MouseLeftButtonPressed() && !shooting) { shooting = true; velocity = (inputHelper.MousePosition - position) * 1.2f; ballShot.Play(); }

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

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