Toisten instanssien muuttujiin viittaaminen

Kuten aiemmin huomattiin, ajossa olevan instanssin muuttujiin voi asettaa arvoja käyttämällä lauseita kuten

x = 3;

Usein halutaan kuitenkin viitata muiden instanssien muuttujiin. Voidaan esimerkiksi haluta pysäyttää kaikkien pallojen liike, siirtää päähahmo tiettyyn sijaintiin tai vaihtaa toisena osapuolena olevan instanssin kuvaa törmäyksen sattuessa. Tämä onnistuu asettamalla muuttujan eteen objektin nimi ja piste, eli esimerkiksi näin:

ball.speed = 0;

Tämä muuttaa kaikkien ball-objektin instanssien nopeuden nollaan. On myös olemassa joukko "erityisobjekteja":

Esimerkiksi seuraavanlaisia lauseita voidaan siis käyttää:

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

Ei ole itsestäänselvää, mitä näistä sijoituksista viimeinen tekee silloin, kun pelissä on useita ball-objektin instansseja. Tällaisissa tapauksissa haetaan ensimmäinen instanssi ja käytetään sen x-arvoa, joka sitten sijoitetaan globaaliin arvoon.

Tilanne hankaloituu hieman, jos halutaan asettaa vain tietyn pallon nopeus. Jokaisella instanssilla on ainutkertainen id. Kun asetat instansseja huoneeseen huonemuokkaimessa, instanssin id näkyy tilarivillä, kun hiiri on instanssin päällä. Id-arvot ovat lukuja, jotka ovat aina suurempia tai yhtä suuria kuin 100000. Näitä lukuja voi myös käyttää pisteen oikealla puolella, mutta on oltava tarkkana, sillä piste käsitetään desimaalierottimeksi, ellei luku ole suluissa. Jos siis erään pallon id olisi 100032, voidaan kirjoittaa:

(100032).speed = 0;

Kun ohjelmassa luodaan uusi instanssi, kutsu palauttaa uuden instanssin id-arvon. Seuraava ohjelma on siis toimiva:

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

Tämä ohjelma luo ball-objektin instanssin ja asettaa sille nopeuden. Huomaa, että tässä instanssin id sijoitettiin muuttujaan, jota sitten käytettiin seuraavaksi pisteen edessä. Tämä on täysin sallittua. Tarkemmin ottaen, piste on oikeastaan operaattori, joka ottaa vasemmalta puolelta arvon ja oikealta puolelta muuttujan (osoitteen) ja sitten palauttaa vastaavan muuttujan muistiosoitteen. Kaikki objektien nimet ja yllä mainitut erikoisobjektit esittävät lukuarvoja ja niitä voidaan käsitellä kuten mitä tahansa muita arvoja. Seuraava ohjelma on siis toimiva:

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

Viimeinen lause tulkitaan seuraavasti: ensin otetaan ensimmäisen flag-objektin instanssin id-muuttuja. Sitten asetetaan sen instanssin x-koordinaattiin arvo 12, jonka id-arvo on sama kuin aiemmin saatu id.

Objektien nimiä, erikoisobjekteja ja instanssien id-arvoja voidaan käyttää monenlaisissa funktioissa. Niitä itse asiassa käsitellään ohjelmissa vakioina.