Het ontwerpen van spellen met Game Maker
Instanties
In het spel zijn de basis eenheden de instanties van de verschillende objecten. Tijdens het spelen kun je een aantal aspecten van deze instanties wijzigen. Ook kun je nieuwe instanties aanmaken en instanties verwijderen. Naast de aan beweging gerelateerde variabelen hierboven besproken en de aan tekenen gerelateerde variabelen hieronder besproken, heeft elke instantie de volgende variabelen:
object_index* Index van het object waar dit een instantie van is. Deze variabele kan niet worden gewijzigd.
id* De unieke herkenning voor de instantie (>= 100000). (Merk op dat als er rooms worden gemaakt het id van een instantie onder de muis altijd wordt weergegeven.)
mask_index Index van de sprite gebruikt als mask (scherm) voor botsingen. Geef dit een waarde van -1 om het hetzelfde te maken als de sprite_index.
solid Of de instantie solid is. Dit kan worden gewijzigd tijdens het spel.
persistent Of de instantie blijvend is en opnieuw zal verschijnen als er naar een andere room wordt gegaan. Vaak zet je 'blijvend' op bepaalde momenten uit. (Bijvoorbeeld als je naar de eerste room gaat.)
Er is een probleem met het gebruik van instanties. Het is niet zo makkelijk een enkele instantie te identificeren. Zij hebben geen naam. Als er slechts een instantie van een bepaald object is kun je de object naam gebruiken maar anders moet je het id van de instantie gebruiken. Dit is een unieke aanduider voor de instantie. Je kunt dit gebruiken in with statements and als een object aanduider. Gelukkig zijn er een aantal variabelen en routines die je helpen instantie id's te vinden.
instance_count* Aantal instanties die momenteel in de room bestaan.
instance_id[0..n-1]* De instantie id van een bepaalde instantie. Hier is n het aantal instanties.
Merk op dat de aanwijzing van de instanties van de instantie id's elke stap wijzigen, dus je kunt geen waarden van vorige stappen gebruiken. Laat me een voorbeeld geven. Stel dat elke unit in je spel een bepaalde kracht heeft en je wilt de sterkste hebben. Je kunt dan de volgende code gebruiken:
{ maxid = -1; maxpower = 0; for (i=0; i<instance_count; i+=1) { iii = instance_id[i]; if (iii.object_index == unit) { if (iii.power > maxpower) {maxid = iii; maxpower = iii.power;} } } }
Na de lus zal maxid het id bevatten van de unit met de grootste kracht. (Verwijder geen instanties tijdens zo'n lus omdat ze automatisch zullen worden verwijderd uit de reeks en tot gevolg hebben dat je instanties overslaat.)
instance_find(obj, n) Geeft het id van de (n+1)'de instantie van type obj terug. obj kan een object zijn of het sleutelwoord all. Als deze niet bestaat wordt het speciale object noone teruggegeven. Merk op dat de aanduiding van de instantie tot de instantie id's elke stap wijzigen dus je kunt geen waarden van vorige stappen gebruiken.
instance_exists(obj) Geeft terug of een instantie van het type obj bestaat. obj kan een object zijn, een instantie id, of het sleutelwoord all.
instance_number(obj) Geeft het aantal instanties van type obj terug. obj kan een object of het sleutelwoord all zijn.
instance_position(x, y, obj) Geeft het id van de instantie van het type obj op positie (x,y) terug. Als er meerdere instanties op die positie zijn wordt de eerste teruggegeven. obj kan een object zijn of het sleutelwoord all. Als er geen instantie bestaat op (x,y) wordt het speciale object noone teruggegeven.
instance_nearest(x, y, obj) Geeft het id van de instantie van type obj het dichtst bij (x,y) terug. obj kan een object zijn of het sleutelwoord all.
instance_furthest(x, y, obj) Geeft het id van de instantie van type obj het verst van (x,y) terug. obj kan een object zijn of het sleutelwoord all.
instance_place(x, y, obj) Geeft het id van de instantie van type obj terug die de huidige instantie zal ontmoeten als deze op positie (x,y) wordt geplaatst. obj kan een object zijn of het sleutelwoord all. Als deze niet bestaat wordt het speciale object noone teruggegeven.
De volgende functies kunnen worden gebruikt om instanties te maken of te verwijderen.
instance_create(x, y, obj) Maakt een instantie van obj op positie (x,y). De functie geeft het id van de nieuwe instantie terug.
instance_copy(performevent) Maakt een kopie van de huidige instantie. Het argument geeft aan of het create-event moet worden uitgevoerd voor de kopie. De functie geeft het id van de kopie terug.
instance_destroy() Verwijderd de huidige instantie.
instance_change(obj, perf) Wijzigt de instantie in obj. perf geeft aan of de create- en destroy-events moeten worden uitgevoerd of niet.
position_destroy(x, y) Verwijderd alle instanties wiens sprite positie (x,y) bevatten.
position_change(x, y, obj, perf) Wijzigt alle instanties op (x,y) in obj. perf geeft aan of de create- en destroy-events moeten worden uitgevoerd.