Introductie GameEngine. Inhoud  De Game Package  Speelveld aanmaken  GameObjecten met...

Click here to load reader

download Introductie GameEngine. Inhoud  De Game Package  Speelveld aanmaken  GameObjecten met plaatjes neerzetten  De Game-loop  Besturing door de speler

of 26

  • date post

    12-May-2015
  • Category

    Documents

  • view

    213
  • download

    0

Embed Size (px)

Transcript of Introductie GameEngine. Inhoud  De Game Package  Speelveld aanmaken  GameObjecten met...

  • Dia 1
  • Introductie GameEngine
  • Dia 2
  • Inhoud De Game Package Speelveld aanmaken GameObjecten met plaatjes neerzetten De Game-loop Besturing door de speler Een timer gebruiken Events in het spel, waaronder collisions
  • Dia 3
  • Structuur van een spel Een spel bestaat in het algemeen uit een aantal 'onderdelen': Een 'wereld' (rooms, levels) met achtergrond waarin het spel zich afspeelt. GameObject dat door de speler bestuurd wordt. Andere GameObjecten die met elkaar interacteren. Geluid, Menu, Formulier, Scorebord... Spel 'loopt'.....!
  • Dia 4
  • De Game Package De game-package bevat allerlei zaken, die je helpen een spel te bouwen: 'Tile environment', wereldgrenzen, image... GameObject: statisch object in het spel. MovableGameObject: bewegend object in het spel (de gameplayer is ook van dit type) Timer, Geluid, Formulier, Dashboard... Besturing (Touch screen, Motion Sensor..) GameEngine: laat het spel lopen, beheert lijst van GameObjects, MovableGameObjects, achtergrond, etc.
  • Dia 5
  • De Game Loop (eerste keer) De GameEngine start het spel en komt dan in een loop: maak speelveld met achtergrond plaats initile GameItems en GamePlayer Initialiseer variabelen (punten, etc) while ( gameRunning ) { doe spelacties...... teken spel opnieuw }
  • Dia 6
  • Het speelveld (1) Het speelveld kan zo groot zijn als je scherm en stil staan (bijv pacman). Het speelveld kan ook groter dan je scherm zijn. Er is dan een viewport, een venster waardoor je een deel van het speelveld ziet. speelveld viewport speler
  • Dia 7
  • Het speelveld (2) In platform games en shooters zorgt de game- package ervoor dat viewport met de speler mee beweegt. Je kunt dan de positie van de speler in de viewport instellen. In dit voorbeeld: horizontaal: midden. verticaal: beneden speelveld viewport speler
  • Dia 8
  • Het speelveld (3) Achtergrond kan leeg zijn, maar je kunt deze ook vullen met plaatjes: tiles int[][] map = { { -1, -1, 0, 2, -1, -1, -1, -1, -1, -1, -1, -1 }, { -1, 0, 3, 3, 2, -1, -1, -1, -1, 0, 1, 1 }, { 0, 3, 3, 3, 3, 2, -1, -1, 0, 3, 3, 3 }, { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 } }; 0123401234
  • Dia 9
  • Game Objects (1) GameObjecten kunnen statisch of bewegend zijn. Voor beide bevat de game-package standaardklassen, die je uitbreidt met je eigen functionaliteit. class Flesje extends GameObject { // eigen plaatje, gedrag... // bijv: punten als speler het pakt } class Kogel extends MoveableGameObject { // eigen plaatje, gedrag... // bijv: snelheid geven, botsen met vijand }
  • Dia 10
  • Game Objects (2) Statische objecten: maak je (constructor) geef je een positie laat je door de GameEngine op het speelveld zetten hebben 1 of meer plaatjes (sprite) kunnen zichtbaar/onzichtbaar zijn hebben een methode update() die elke gameloop wordt aangeroepen Plus het gedrag dat je erbij maakt!
  • Dia 11
  • Game Objects (3) Plaatjes zijn ingedeeld in frames. Die frames zitten in n image-bestand. Je geeft het aantal frames op, en de game-engine knipt dat plaatje op in frames. Animatie kan, zelf frame kiezen ook.
  • Dia 12
  • Game Objects (4) Bewegende objecten: hebben alles wat statische objecten ook hebben, plus: snelheid botsingen wrijving
  • Dia 13
  • Game Objects (5) GameObjecten hebben een methode update() die elke gameloop wordt aangeroepen. De standaardinvulling van deze methode zorgt voor essentile basisacties als rendering, verplaatsen van bewegende objecten e.d. Door deze methode te overriden voeg je gedrag toe, bijvoorbeeld het afhandelen van botsingen, verwerken van input. Begin deze override altijd met super.update(), anders gebeuren de basisacties niet meer!
  • Dia 14
  • De speler Er is geen speciaal object voor de speler. Dit is soms een gewoon GameObject, soms geen enkel. Je kunt wel een GameObject in de rol van speler aan de game toevoegen. De viewport volgt dan dit GameObject. NB. Tetris is een voorbeeld van een spel zonder zichtbare speler.
  • Dia 15
  • De Game Loop (tweede keer) De GameEngine verplaatst de bewegende objecten:.... while ( gameRunning ) {update() van alle GameObjects (standaard: sprite-animatie, verplaatsen van Moveables...) (niet-standaard in eigen override van update()).... pas zonodig viewport aan (bij bewegende speler) teken viewport opnieuw }
  • Dia 21
  • Aansturing op tijd (1) Soms wil je dingen met een vertraging laten gebeuren. Je kunt dan bij de GameEngine een wekker (alarm) zetten, met het verzoek om een seintje te krijgen na een bepaalde tijd (een aantal stappen in de game-loop. Bijv 1: Speler schiet en kan pas opnieuw schieten na verloop van een korte tijd. Bijv 2: Na een tijdje verschijnt er een nieuw hapje of power-up Objecten die Alarms willen gebruiken, moeten de interface IAlarm gebruiken om wake-upcalls te ontvangen. Alarms kun je hergebruiken door ze te restarten. Voorbeeld: StrawberryControler.
  • Dia 22
  • Timers Werking timer: new Alarm(tijd, id-nummer, this) startAlarm() GameEngine Object implements IAlarm Object implements IAlarm (na stappen van de game-loop:) triggerAlarm(id-nummer)
  • Dia 23
  • De Game Loop (vierde keer) De GameEngine laat alarms afgaan:.... while ( gameRunning ) {update() van alle GameObjects (standaard: sprite-animatie, verplaatsen van Moveables, detecteer tile-collisions voor ICollision-objecten...) (niet-standaard in eigen override van update() met: vraag object-collisions op) update Alarms en laat ze zonodig aflopen.... pas zonodig viewport aan (bij bewegende speler) teken viewport opnieuw }
  • Dia 25
  • En nu aan de slag! Geen game-idee? Pak je favoriete Nintendo-spelletje, of kijk eens rond naar Flash-spelletjes op internet Maandag nog geen idee? Paul komt paar spel-ideen laten zien.
  • Dia 26
  • Samenstelling groepje Naar eigen inzicht duos kiezen, maar Docent kan veto uitspreken Samenstelling uiterlijk maandag om 10.00 uur doorgeven per mail: ralphniels+oopd@gmail.com. ralphniels+oopd@gmail.com