Events (gebeurtenissen)
Game Makergebruikt een gebeurtenis gedreven benadering (event driven approach). Dat betekent dat instanties van objecten gebeurtenissen ontvangen (een soort boodschappen dat er iets is gebeurd). Ze kunnen hierop reageren door bepaalde acties uit te voeren. Voor ieder object moet je vastleggen op welke gebeurtenissen het moet reageren en welke acties het object dan moet ondernemen. Dit lijkt misschien gecompliceerd, maar is eigenlijk vrij gemakkelijk. Voor de meeste gebeurtenissen hoeft het object niets te doen. Voor de gebeurtenissen waar wel op gereageerd moet worden, kun je een 'drag and drop' benadering kiezen om de acties vorm te geven.
In het midden van het objecteigenschappen scherm zien je een lijst van events waarop het object moet reageren. In het begin is deze lijst leeg. Je kunt events toevoegen aan de lijst door op de knop Add Eventte drukken. Dan verschijn er een venster met daarin de verschillende typen events Daarvan kun je er een selecteren die je wilt toevoegen. Soms verschijnt er een extra venster met daarin nog meer keuzes. Bijvoorbeeld, voor de keyboard event moet je key selecteren, dan verschijnt er onderin een lijst met allerlei mogelijkheden, met beschrijvingen, waaruit je een keuze kunt maken. Een event in de lijst wordt geselecteerd, die kan dan worden aangepast. Je kunt een event wijzigen door er op te gaan staan met de muis en er met de linkermuisknop op te klikken. Aan de rechterkant worden deze acties gerepresenteerd door kleine icoontjes. Zij worden gegroepeerd in een aantal door tabbladen aangegeven pagina's. In het volgende hoofdstuk wordt beschreven welke acties mogelijk zijn en wat zij inhouden. Tussen de gebeurtenissen en acties is een lijst. Deze lijst bevat de acties voor de geselecteerde gebeurtenis. Om acties toe te voegen aan de lijst, trek je hen met de muis van de rechterkant naar de lijst. Zij worden onder elkaar geplaatst, met een korte beschrijving erbij. Voor iedere actie word je gevraagd een aantal parameters mee te geven. Deze worden ook beschreven in het volgende hoofdstuk. Dus na een paar acties wordt de situatie bijv. als volgt:
Nu kun je beginnen om acties aan een ander event toe te voegen. Klik daarvoor op de juiste event met de linkermuisknop en sleep vervolgens de acties in de lijst.
Je kunt de volgorde waarin de acties in de lijst staan veranderen, door gebruik te maken van drag-and-drop. Wanneer je de <Alt> knop vasthoudt terwijl je sleept, maak je een kopie van de actie. Je kunt zelfs drag-and-drop gebruiken tussen actielijsten van de verschillende objecten. Wanneer je klikt op een actie met de rechter muisknop, verschijnt een menu waarin je een actie kunt verwijderen (dit kan ook door de <Del> knop te gebruiken) maar ook kunt knippen en plakken. (je kunt meerdere acties voor knippen, kopiëren of verwijderen selecteren door de <Shift> toets of de <Ctrl> toets te gebruiken. Druk op <Ctrl><A> om alle acties te selecteren.) Als je je muis stil houdt boven een actie verschijnt er een langere beschrijving van die actie in beeld. Kijk in het volgende hoofdstuk om meer te weten te komen over acties. Er bestaat een grote collectie verschillende events. Zoals je kunt zien in het object properties scherm, hebben sommige menunamen een menu symbool naast zich. Dit betekent dat er een collectie van events is. Wanneer je klikt op het menu, of rechts klikt op de eventnaam, verschijnt een menu waarin je een event kunt kiezen die je wilt veranderen. Hier volgt een beschrijving van de verschillende events. (normaal gebruik je maar een paar van deze).
Om een geselecteerde event te verwijderen, samen met alle acties, moet je klikken op de knop met de naam Delete. (Events zonder enige actie erin worden automatisch gewist als je het venster sluit, dus die hoef je niet handmatig te wissen.) Als je acties aan een ander event wil toekennen (bijvoorbeeld omdat je besloten hebt een andere toets ervoor te kiezen), klik dan op de knop met de naam Change en kies voor de nieuwe event die je wilt gebruiken (Die event hoeft nog niet in de lijst voor te komen.) Het is ook mogelijk om een event, inclusief acties, te dupliceren door met je rechtermuisknop op de eventlijst te klikken en in het pop-up menu wat dan verschijnt te kiezen voor Duplicate Event
Zoals boven al is aangegeven kun je een event aan de lijst toevoegen door te klikken op de knop Add Event. Het volgende venster verschijnt dan in beeld:
Hier kies je een event die je wilt toevoegen aan de lijst. Soms verschijnt er een venster met extra keuzemogelijkheden. Hieronder volgt een beschrijving van de diverse events. (Houd er rekening mee dat je in de praktijk heel vaak slechts enkele ervan zult gebruiken.)
Create event
Deze event treedt op wanneer een instantie van een object wordt gecreëerd. Het wordt meestal gebruikt om een instantie in beweging te zetten en/of bepaalde variabelen in te stellen voor deze instantie.
Destroy event
Deze event treedt op wanneer de instantie wordt vernietigd. Eigenlijk treedt dit event op vlak voordat de instantie wordt vernietigd, zodat de instantie nog bestaat wanneer de event wordt uitgevoerd. Meestal wordt deze event niet gebruikt, behalve wanneer het de bedoeling is om de score te wijzigen, of om een ander object te creëren.
Alarm events
Iedere instantie heeft 8 alarm klokken. Je kunt deze alarmklokken inschakelen door bepaalde acties te gebruiken(zie het volgende hoofdstuk). De alarmklok tikt dan af tot 0 en op dat moment wordt de alarm event gegenereerd. Om de acties voor een bepaalde alarm klok aan te geven, moet het eerst geselecteerd worden in het menu. Alarm klokken zijn zeer nuttig. Je kunt hen gebruiken om bepaalde dingen te laten gebeuren in de tijd. Bijvoorbeeld om de bewegingsrichting van een monster na iedere 20 stappen te wijzigen. (In dit geval moet één actie in de event de klok opnieuw instellen).
Step events
De step event treedt op bij iedere stap in het spel. Hier kun je acties plaatsen die continu uitgevoerd moeten worden. Bijvoorbeeld; wanneer een object een ander object moet volgen, kun je hier de bewegingsrichting aanpassen zodat het tweede object gevolgd wordt. Met deze event moet je voorzichtig zijn. Geef niet veel van deze gecompliceerde acties in de step event van objecten mee, wanneer er veel instanties van dit object zijn. Dit vertraagt het spel. Eigenlijk zijn er drie verschillende step events. Meestal heb je alleen de default nodig. Wanneer je het menu gebruikt, kun je de begin en eind step event laten plaatsvinden. De normale step event wordt uitgevoerd vlak voordat de instanties in hun nieuwe posities worden geplaatst. De eind step event wordt uitgevoerd aan het einde van de step, vlak voor het tekenen. Dit wordt gebuikt om de sprite te laten veranderen afhankelijk van de richting.
Collision events
Wanneer twee instanties botsen (sprites overlappen) treedt een collision event op. Eigenlijk treden twee collision events op, voor iedere instantie één. De instantie kan op deze event reageren. Selecteer in het menu het object waarmee je een collision event wilt definiëren. Daarna worden in het collision event de acties geplaatst.
Er bestaat een verschil in wat er gebeurt, wanneer een instantie botst met een solide object of dat een instantie botst met een niet-solide object. Wanneer er geen acties in de collision event zijn opgenomen, gebeurt er niets. De huidige instantie blijft gewoon bewegen; zelfs wanneer het andere object een solide object is. Wanneer de collision event acties bevat, gebeurt het volgende:
Botsing met een solide object: de instantie wordt teruggeplaatst op zijn voorafgaande plaats ( dus vóór de botsing plaatsvindt). De event wordt uitgevoerd. Uiteindelijk wordt de instantie naar zijn nieuwe positie verplaatst. Dus wanneer de event de bewegingsrichting omkeert, botst de instantie op de muur zonder te stoppen. Als er nog steeds een botsing plaatsvindt, wordt de instantie op zijn vorige plaats gehouden. Op die manier houdt hij echt op te bewegen.
Wanneer het andere object een niet-solide object is, wordt de instantie niet teruggezet. De event wordt gewoon uitgevoerd, met de instantie op zijn huidige positie. Er wordt geen tweede check gedaan op botsingen. Als je erover nadenkt is dit logisch, wat er gebeurt. Omdat het object niet solide is, kunnen we er gewoon over heen bewegen. De event geeft aan dat dit gebeurt.
Er zijn veel mogelijkheden voor de collision event. Instanties kunnen het gebruiken om tegen muren te botsen. Je kunt het gebruiken om objecten te vernietigen wanneer zij geraakt worden door bijv. een kogel.
Keyboard events
Wanneer de speler een toets indrukt, vindt een keyboard event plaats voor alle instanties van alle objecten. Er is een verschillende event voor iedere toets. In het menu kun je de toets kiezen, waarvoor je de keyboard event wilt definiëren en daar acties naar toe brengen. Slechts een paar objecten hebben events nodig voor slechts een paar toetsen. Er zijn twee verschillende manieren waarin je keyboard events kunt ontvangen. Zij zijn continue, d.w.z. zolang als de toets wordt ingedrukt vindt een keyboard event plaats in iedere stap. Wanneer zij niet continue zijn vindt er een slechts één keyboard event plaats, wanneer de toets wordt ingedrukt en opnieuw wanneer de toets weer wordt ingedrukt. Er zijn twee speciale keyboard events. Ten eerste: <No key>. Deze event treedt op in iedere stap wanneer geen toets wordt ingedrukt. De tweede heet <Any key> en treedt op wanneer elke willekeurig toets wordt ingedrukt. Wanneer de speler meerdere toetsen indrukt, treden voor alle ingedrukte toetsen events op. Let op: wanneer toetsen van het numerieke toetsenbord worden ingedrukt vinden alleen de corresponderende events plaats, wanneer ook <NumLock> is ingedrukt.
Mouse events
Een muis event vindt plaats, wanneer de muiscursor ligt binnen het sprite gebied die de instantie representeert. Afhankelijk van welke muisknop wordt ingedrukt, krijg je de linkermuisknopevent, de rechtermuisknopevent, de geenmuisknopevent of de middelstemuisknopevent. Deze button-events worden in iedere step opnieuw uitgevoerd zolang de muisknop ingedrukt is. De press-events worden slechts eenmaal uitgevoerd als de muisknop wordt ingedrukt. De release-events worden uitgevoerd als een muisknop wordt losgelaten. Deze events vinden alleen plaats, zolang de muis boven de instantie is. Indien je op een willekeurige plaats in de room wilt reageren op de muis press-events of muis release-events moet je gebruikmaken van de global mouse events die je in het submenu kunt vinden. Er zijn twee speciale mouse events. de mouse enter event treedt op wanneer de muis een instantie binnengaat. De mouse leave event treedt op als de muis eeen instantie uitgaat. Deze events kun je vooral toepassen om bijvoorbeeld van sprite te veranderen of een geluid af te spelen. Daarnaast zijn er ook nog een aantal events die betrekking hebben op de joystick. Je kunt acties aangeven voor de vier verschillende hoofdrichtingen van de joystick. (in diagonale richting treden beide events op.) Op deze manier kun je acties definiëren voor maximaal 8 joystick-knoppen. Dit kun je voor zowel de primaire als de secundaire joystick doen.
Other events
Er zijn een aantal andere events die bruikbaar kunnen zijn in bepaalde spellen. Zij staan hieronder genoemd:
- Outside: Deze event vindt plaats wanneer een instantie totaal buiten de kamer ligt. Dit is een goed moment om het te vernietigen.
- Boundary: Deze event vindt plaats wanneer de instantie de grens van de kamer snijdt.
- Game start: Deze gebeurtenis treedt op bij alle instanties in de eerste kamer, wanneer het spel start. Het treedt op voor de room start-event (zie hieronder) en vóór de creation events van de instanties in de kamer. Deze event wordt gedefinieerd in slechts één "controller"-object en wordt gebruikt om achtergrondmuziek te starten of om sommige variabelen te initialiseren of data te laden.
- Game end: Deze event vindt plaats voor alle instanties wanneer het spel eindigt. Opnieuw wordt dit event gedefinieerd door slechts één object. Het kan bijv. worden gebruikt om data in een bestand op te slaan.
- Room start: Deze event treedt op bij alle instanties die in de room aanwezig zijn, op het moment dat de room start. Het treedt op vóór de creatie events.
- Room end: Deze event treedt op bij alle bestaande instanties op het moment dat de room wordt beëindigd.
- No more lives: Game Maker heeft een built-in lives systeem. Er bestaat geen actie om het aantal levenden in te stellen en te veranderen. Wanneer het aantal levenden kleiner of gelijk aan 0 wordt, treedt deze event op. Het wordt gebruikt om het spel te beëindigen of opnieuw op te starten.
- No more health: Game Maker heeft een built-in health systeem. Er bestaat een action om de health in te stellen en te veranderen. Indien de waarde van de health kleiner of gelijk wordt dan 0, treedt deze event op. Het is typisch een event om het aantal levens te evrminderen of het spel opnieuw op te starten.
- End of animation: Zoals boven al aangegeven, bestaat een animatie uit een aantal plaatjes die achtereenvolgend zichtbaar worden. Nadat het laatste plaatje zichtbaar is geweest, begint de eerste weer. De event treedt precies op dat moment op. Dit kan worden gebruikt om een animatie te veranderen of om een instantie te vernietigen.
- End of path: Deze event treedt op als een instantie aan het eind van het ingestelde pad is gekomen.
- User defined: Er bestaan 8 van zulke events. Normaliter komen die nooit voor tezij je ze met behulp van een stuk GML-code oproept.
Drawing event
Zichtbare instanties tekenen hun sprites in iedere stap van het scherm. Wanneer je acties in de drawing event specificeert, wordt de sprite niet getekend, maar worden de gespecificeerde acties uitgevoerd. Dit kan worden gebruikt om iets anders dan de sprite te tekenen of veranderingen aan te brengen in de sprite parameters. Er zijn een aantal drawing actions die speciaal bedoeld zijn voor de drawing event. De drawing event wordt niet alleen uitgevoerd wanneer het object zichtbaar is. Onafhankelijk van wat je hier tekent, zijn collision events gebaseerd op de sprite die is geassocieerd met de instantie.
Key press events
Deze event lijkt op de keyboard-event maar hij treedt alleen op als de toets indrukt, maar dan wel maar 1 keer. Dit is erg handig als een actie slechts eenmaal moet worden uitgevoerd, bijvoorbeeld bij het afvuren van kogels uit een kanon.
Key release events
Deze event lijkt op de keyboard-event maar hij treedt alleen op als de toets loslaat, maar dan wel maar 1 keer.
In bepaalde gevallen is het belangrijk dat je weet hoe Game Makeromgaat met de events in volgorde van uitvoering. Dat gebeurt als volgt:
- Begin step events
- Alarm events
- Keyboard, Key press, en Key release events
- Mouse events
- Normal step events
- (nu worden alle instanties op hun nieuwe posities geplaatst)
- Collision events
- End step events
- Drawing events
De creation, destroy en andere events worden uitgevoerd als de overeenkomstige zaken gebeuren. Drawing event Zichtbare instanties tekenen hun sprites in iedere stap van het scherm. Wanneer je acties in de drawing event specificeert, wordt de sprite niet getekend, maar worden de gespecificeerde acties uitgevoerd. Dit kan worden gebruikt om iets anders dan de sprite te tekenen of veranderingen aan te brengen in de sprite parameters. Er zijn een aantal drawing actions die speciaal bedoeld zijn voor de drawing event. De drawing event wordt niet alleen uitgevoerd wanneer het object zichtbaar is. Onafhankelijk van wat je hier tekent, zijn collision events gebaseerd op de sprite die is geassocieerd met de instantie.