De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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,

Verwante presentaties


Presentatie over: "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,"— Transcript van de presentatie:

1 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, PC) http://www.apress.com/9781430265382

2 Hoorcollege 6 Afronding Painter, overerving

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

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

5 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 Subklassen

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

7 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

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

9 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

10 Protectiemechanisme public – 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

11 Protectiemechanisme In Painter: class Ball {... protected float mass; public Vector2 position; public float Mass { get {... } } public void Update(); private void InterneMethode();... } 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!

12 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); } Handige methoden voor game objecten! = de methode mag vervangen worden in een subklasse

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

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

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

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

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

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

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

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

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

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

23 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?

24 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

25 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

26 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

27 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

28 Tekst op het scherm tekenen Gebruik de methode DrawString uit de SpriteBatch klasse Type: string – Lijst van karakters Er is ook een type om 1 karakter te representeren: char

29 1970s:6 bits = 64 symbols 26 letters, 10 digits, 28 leestekens 1980s: 7 bits = 128 symbols +26 lowercase, +5 leestekens, 33 control 1990s: 8 bits = 256 symbols +letters met accenten 2000s: 16 bits = 65536 symbols +Grieks, Cyrillisch, Japans, Devangari,... IBM/DOS Geschiedenis van char ASCII ANSI/ISO Unicode

30 Character coding code 0 code 127 code 48 code 32 code 65 code 97

31 char bijzonderheden alfabetisch geordend char c; if ( ’A’<=c && c<=’Z’ ) … converteerbaar naar int int n; n = c + 32; en terug c = (char) n;

32 Conversies Conversie (cast) naar “grotere” waarde kan altijd double d; int n; d = n; int n; char c; n = c; ThreeColorGameObject x; Ball b = new Ball(Content); x = b; Conversie naar “kleinere” waarde is gevaarlijk n = (int) d;c = (char) n; b=(Ball) x;

33 twee tekens in de broncode, toch één character! Speciale char-waarden Letterlijk symbool Speciaal symbool Het quote-symbool Het backslash-symbool ’A’ ’\n’ ’\’’ ’\\’ ’&’ ’\t’ ’\”’

34 Strings string altijd tussen dubbele aanhalingstekens: Syntaxdiagram voor constanten: string test = "Dit is een test";

35 Score op het scherm tekenen Draw methode van GameWorld uitbreiden: public void Draw(GameTime gameTime, SpriteBatch spriteBatch) { spriteBatch.Begin(); spriteBatch.Draw(background… …. spriteBatch.DrawString(gameFont, "Score: " + score, new Vector2(20, 18), Color.White); for (int i = 0; i < lives; i++) spriteBatch.Draw(livesSprite, … if (lives <= 0) spriteBatch.Draw(gameover, … spriteBatch.End(); } Tekst op het scherm tekenen

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

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

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

39 Practicumdeadline Komende zondag – Middernacht Lever je opdracht in via Submit …probeer dat eerder dan 23:59:59 te doen Te laat inleveren = geen practicumcijfer!

40 Toets vrijdag Zaal: Ruppert-Blauw Tijd: 8.30-10.30 uur Let op: geen open-boek! Je krijgt een bijlage met XNA/C# klassen en methoden Vrijdag zijn er geen andere bijeenkomsten voor Gameprogrammeren!

41


Download ppt "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,"

Verwante presentaties


Ads door Google