Toisten instanssien muuttujiin viittaaminen

Kuten aiemmin kerrottiin, muuttujia voidaan asettaa nykyiselle instanssille käyttämällä seuraavan lauseen tapaisia lauseita:

x = 3;

Monissa tapauksissa haluat kuitenkin viitata toisten instanssien muuttujiin. Voit esimerkiksi haluta pysäyttää kaikki pallot, tai voit haluta siirtää päähahmon tiettyyn sijaintiin, tai törmäystilanteessa voit haluta asettaa toisen törmäyksen osapuolena olevan instanssin kuvan. Nämä kaikki on mahdollista toteuttaa kirjoittamalla ennen muuttujaa objektin nimi ja piste. Voit siis esimerkiksi kirjoittaa seuraavasti:

ball.speed = 0;

Tämä muuttaa kaikkien ball-objektien instanssien nopeutta. On myös olemassa muutama "erikoisobjekti".

Voit siis käyttää seuraavanlaisia lauseita:

other.sprite_index = sprite5;
all.speed = 0;
global.message = 'A good result';
global.x = ball.x;

Nyt varmaankin ihmettelet, mitä viimeinen äskeisistä sijoituksista tekee, kun olemassa on enemmän kuin yksi ball-objektin instanssi. Se toimii niin, että se ottaa ensimmäisen ball-objektin instanssin x-arvon ja säilöö sen globaaliin arvoon.

Mitä jos haluttaisiinkin asettaa yhden tietyn ball-objektin instanssin nopeus kaikkien ball-objektin instanssien sijaan? Se on hiukan vaikeampaa. Jokaisella instanssilla on yksilöllinen tunnistearvo id. Kun asetat instansseja huoneeseen suunnittelutilassa, tämä instanssin id-arvo näytetään, kun hiiri on instanssin päällä. Nämä id-arvot ovat suurempia tai yhtä suuria kuin 100000. Tätä lukua voidaan käyttää myös pisteen vasemmalla puolella. Ole kuitenkin varovainen. Piste nimittäin tulkitaan luvun desimaalipisteeksi. Tämän välttämiseksi laita sen ympärille sulut. Esimerkiksi, jos ball-objektin instanssin id-arvo on 100032, voit käyttää seuraavanlaista koodia:

(100032).speed = 0;

Kun luot instanssin ohjelmassa, tämä kutsu palauttaa uuden instanssin id-arvon. Seuraava ohjelmapätkä on siis kelvollinen:

{
  nnn = instance_create(100,100,ball);
  nnn.speed = 8;
}

Tämä koodi luo ball-objektin instanssin ja asettaa sen nopeuden. Huomaa, että instanssin id-arvo sijoitettiin muuttujaan ja tätä muuttujaa käytettiin instanssin ilmoittamiseen pisteen edellä. Tämä on täysin sallittua. Yritetään tehdä tästä vielä tarkempaa: piste on oikeastaan operaattori. Se ottaa arvon vasempana tekijänä ja muuttujan (osoitteen) oikeana tekijänä, ja sitten palauttaa tämän kyseisen objektin tai instanssin muuttujan osoitteen. Kaikki objektien nimet ja ylempänä esitellyt erikoisobjektit yksinkertaisesti vastaavat arvoja ja niitä voidaan käsitellä kuten mitä tahansa arvoja. Esimerkiksi seuraava ohjelma on täysin sallittu:

{
  obj[0] = ball;
  obj[1] = flag;
  obj[0].alarm[4] = 12;
  obj[1].id.x = 12;
}

Viimeinen lause tulisi lukea seuraavanlaisesti: ensin otetaan ensimmäisen flag-objektin instanssin id. Sen instanssin, jonka id on kyseessä, x-arvoksi asetetaan 12.

Objektien nimiä, erikoisobjekteja ja instanssien id-arvoja voidaan myös käyttää useissa funktioissa. Niitä oikeastaan käsitellään ohjelmissa vakioina.