- Deze observer reageert op evenementen van het target
- Observer abonneert functies op een event van de target
- Meerdere observers kunnen op een target abonneren
Slide 2 - Slide
Observer pattern
Waarvoor:
- Schonere code
- Objecten hebben minder connecties nodig
- Meerdere functies tegeleik aanroepen zonder referentie
- Makkelijk uit te breiden
Slide 3 - Slide
Observer pattern
Hoe het werkt:
- Delegates: Functie container
Variable waarin je referenties naar functies in op kan slaan.
attack is een instantie van MyDelegate. Attack kan een reference naar iedere void functie opslaan.
Slide 4 - Slide
Observer pattern
Hoe het werkt:
- Functies abonneren op delegate
- attack krijgt hier de waarde van de functie PrimaryAttack
- als attack nu gecalled wordt, wordt PrimaryAttack uitgevoerd.
Slide 5 - Slide
Observer pattern
Hoe het werkt:
- Meerdere functies abonneren
- attack heeft nu de waarde van Primary en Secondary Attack
- Deze worden nu beide uitgevoerd.
Slide 6 - Slide
Observer pattern
Hoe het werkt:
- Invoke het event met null check
- Simpliefied invoke van event met null check
- Nu worden alle geabonneerde functies uitgevoerd
Slide 7 - Slide
Observer pattern
Hoe het werkt:
- Connect andere scripts door het variable static te maken
- Nu kan je vanuit ieder ander script aan het onGameOver delegate abonneren.
Slide 8 - Slide
Observer Pattern
Gevaren
- Delegates triggeren vanuit ander script
- Alle geabonneerde functies clearen
Slide 9 - Slide
Observer Pattern
Gevaren oplossen
- event keywoard toevoegen
- Dit zorgt er voor dat je het event alleen kan triggeren vanuit het eigen script
- Er kan nog wel vanuit andere scripts op geabonneerd worden
Slide 10 - Slide
Observer Pattern
Events vs. Delegates
- Delegates worden voornamelijk gebruikt als functie containers
- Delegates kunnen meegegeven worden als parameter
- Events zijn een veiligere manier van delegates gebruiken
- Events zijn bedoelt voor event systems waarbij meerdere objecten op iets kunnen reageren
Slide 11 - Slide
Observer Pattern
Use cases
- Player events (onDeath, onDamage)
- Enemy events (onSpawn, etc.)
- sceneLoaded (vanuit SceneManager)
- UI events (buttonPress, close/openMenu)
- Achievements
- Many many more
Slide 12 - Slide
Game loop
Een game loop is een centraal onderdeel van de meeste computerspellen en verwijst naar het continu uitvoeren van een aantal stappen die nodig zijn om een spel te laten draaien en de spelervaring te bieden.
Slide 13 - Slide
Game loop
Input verwerking: hier worden alle inputsignalen van de speler verwerkt
Game logica:dit is waar de eigenlijke gameplay plaatsvindt
Rendering: dit is waar alle
beelden van het spel worden
getekend en weergegeven op het scherm.
Slide 14 - Slide
Game Loop - voorbeelden
Slide 15 - Slide
Start - Game loop - End
Voordat je bij een game de core game loop kan ervaren moet je vaak eerst door een start scherm heen en aan het einde is er vaak een Game Over of end screen.
Dit zijn aparte scene's waarin zich vaak alleen UI bevindt, vanuit deze scene's wordt je vaak doorgestuurd naar de game loop.
Slide 16 - Slide
Opdracht
Maak een Start en Game Over Scene.
Maak gebruik van het Observer Pattern om deze Game Over scene op te zetten.
Gebruik ook het Observer Pattern om een simpel achievement systeem te maken dat de speler beloont wanneer deze een bepaalde milestone heeft behaald.