Het ontwerpen van spellen met Game Maker
Deactiveren van instanties
Als je grote rooms maakt, bijvoorbeeld in platform spellen, met een klein beeld, zullen veel instanties buiten het beeld liggen. Zulke instanties zijn toch actief en zullen hun gebeurtenissen (events) uitvoeren. Dit kan veel tijd kosten, wat vaak niet nodig is. (Het is bijvoorbeeld vaak niet nodig dat instanties buiten het beeld zich bewegen.) Om dit probleem op te lossen heeft Game Maker enkele functies om instanties te deactiveren en te activeren. Voordat je deze gebruikt moet je het je duidelijk zijn hoe ze werken.Als je instanties deactiveert kun je je voorstellen dat ze zijn verwijderd uit het spel. Ze zijn niet meer zichtbaar en ze zullen geen gebeurtenissen meer uitvoeren. Dus voor alle acties en functies bestaan ze niet meer. Als je bijvoorbeeld alle instanties van een bepaald type verwijderd, zijn geactiveerde instanties niet verwijderd (omdat ze niet lijken te bestaan). Dus denk niet dat als een speler een sleutel oppakt hij hiermee een gedeactiveerde deur kan openen.
De meest cruciale misstap die je kunt maken is het deactiveren van de instantie die verantwoordelijk is voor het activeren. Om dit te vermijden geven sommige van de onderstaande routines de mogelijkheid om zichzelf niet te deactiveren.
Hier zijn de beschikbare routines:
instance_deactivate_all(notme) Deactiveert alle instanties in de room. Als notme 'true' is zal de instantie zelf niet worden gedeactiveerd (dit is gewoonlijk wat je wilt).
instance_deactivate_object(obj) Deactiveert alle instanties in de room van het gegeven object. Je kunt ook all gebruiken om aan te geven dat alle instanties moeten worden gedeactiveerd of het id van een instantie voor een enkele instantie.
instance_deactivate_region(left, top, width, height, inside, notme) Deactiveert alle instanties in de aangegeven rechthoek (dat is, die wiens botsing rechthoek (gedeeltelijk) in rechthoek ligt). Als inside false is worden de instanties die compleet buiten de rechthoek liggen gedeactiveerd. Als notme true is wordt de instantie zelf niet gedeactiveerd (wat je normaal is).
instance_activate_all() Activeert alle instanties in de room.
instance_activate_object(obj) Activeert alle instanties van het gegeven object in de room. Je kunt ook all gebruiken om aan te geven dat alle instanties moeten worden geactiveerd of het id van een instantie om een enkele instantie te activeren.
instance_activate_region(left, top, width, height, inside) Activeert alle instanties in de aangegeven rechthoek. Als inside false is worden de instanties die compleet buiten de rechthoek liggen geactiveerd.
Om bijvoorbeeld alle instanties buiten het beeld te deactiveren en die binnen het beeld te activeren, kun je de volgende code in de step-gebeurtenis van de bewegende figuur plaatsen:
{ instance_activate_all(); instance_deactivate_region(view_xview[0],view_yview[0], view_wview[0],view_hview[0],false,true); }
Vaak wordt er een iets grotere rechthoek gebruikt dan de grootte van het beeld.