Instanssien deaktivointi

Kun luot suuren huoneen, esimerkiksi tasoloikkapelissä, käyttäen pientä kuvakulmaa, useat instanssit ovat kuvakulman ulkopuolella. Nämä instanssit ovat silti aktiivisia ja suorittavat tapahtumiaan. Myös törmäystapahtumia (Collision) tarkistettaessa nämä otetaan huomioon. Tämä voi viedä paljon aikaa, mikä ei ole useinkaan tarpeellista. (Ei ole esimerkiksi tärkeää, liikkuvatko kuvakulman ulkopuolella olevat instanssit.) Tämän ongelman ratkaisemiseksi Game Makerista löytyy joitain funktioita, joilla voi aktivoida ja deaktivoida instansseja. Ennen kuin käytät niitä sinun on kuitenkin tajuttava, miten ne toimivat.

Kun deaktivoit instansseja, ne tavallaan poistetaan pelistä. Ne eivät ole enää näkyviä eikä niille suoriteta enää tapahtumia. Ne eivät myöskään ole enää olemassa missään toiminnoissa tai funktioissa. Tämä säästää paljon aikaa, mutta sinun tulee olla varovainen. Jos esimerkiksi poistat tietyntyyppiset instanssit, deaktivoituja instansseja ei poisteta (koska ne eivät ole olemassa). Älä siis ajattele, että avain, jonka pelaaja poimii, voi avata deaktivoidun oven.

Kaikkein pahin virhe, jonka voit tehdä, on se, että deaktivoit instanssin, joka on vastuussa aktivoinnista. Tämän välttämiseksi jotkin alla olevista keinoista antavat määrittää, että itse deaktivointia kutsuvaa instanssia ei voi deaktivoida.

Tässä ovat mahdolliset keinot:

instance_deactivate_all(notme) Deaktivoi kaikki huoneen instanssit. Jos notme on tosi, kutsuvaa instanssia ei deaktivoida (tämä on se, mitä yleensä haluat).
instance_deactivate_object(obj) Deaktivoi kaikki annetun objektin instanssit huoneessa. Voit myös käyttää avainsanaa all, jolloin kaikki instanssit deaktivoidaan, tai instanssin id-arvoa, jolloin tämä yksittäinen instanssi deaktivoidaan.
instance_deactivate_region(left,top,width,height,inside,notme) Deaktivoi kaikki instanssit ilmoitetulta alueelta (eli siis kaikki instanssit, joiden raja-alue on ainakin osittain alueen sisällä). Jos inside on epätosi, kaikki instanssit, jotka ovat kokonaan alueen ulkopuolella, deaktivoidaan. Jos notme on tosi, kutsuvaa instanssia ei deaktivoida (tämä on se, mitä yleensä haluat).
instance_activate_all() Aktivoi kaikki huoneen instanssit.
instance_activate_object(obj) Aktivoi kaikki annetun objektin instanssit huoneessa. Voit myös käyttää avainsanaa all, jolloin kaikki instanssit aktivoidaan, tai instanssin id-arvoa, jolloin tämä yksittäinen instanssi aktivoidaan.
instance_activate_region(left,top,width,height,inside) Aktivoi kaikki tietyn alueen instanssit. Jos inside on epätosi, kaikki instanssit, jotka ovat täysin alueen ulkopuolella, aktivoidaan.

Jos siis esimerkiksi haluat deaktivoida kaikki kuvakulman ulkopuolella olevat instanssit ja aktivoida instanssit, jotka ovat kuvakulman sisällä, voit asettaa seuraavan koodin liikkuvan hahmon askeltapahtumaan (Step):

{
  instance_activate_all();
  instance_deactivate_region(view_xview[0],view_yview[0],
                        view_wview[0],view_hview[0],false,true);
}

Käytännössä haluat luultavasti käyttää hieman kuvakulmaa suurempaa aluetta.