ball.y = ball.y + 8;
Tämä ei kuitenkaan ole oikein. Sijoituksen oikea puoli ottaa talteen ensimmäisen ball-objektin y-koordinaatin ja lisää siihen 8. Sitten tämä arvo asetetaan kaikkien ball-objektien y-koordinaatiksi. Tulos on siis, että kaikki ball-objektit saavat saman y-koordinaatin. Lauseella
ball.y += 8;
on täysin sama vaikutus, koska se on vain ensimmäiseksi kirjoitetun lauseen lyhenne. Miten siis toteutetaan haluttu tapahtuma? Tähän tarkoitukseen on olemassa with-lause. Se on aina muotoa
with (<lauseke>) <lause>
<lauseke> ilmaisee yhtä tai useampaa instanssia. Voit käyttää siinä instanssin id-arvoa, objektin nimeä (joka siis vastaa kaikkia objektin instansseja) tai jotain erityisnimistä (all, self, other, noone). Sitten <lause> suoritetaan kaikilla ilmoitetuilla instansseilla. Kaikkien ball-objekten 8 pikseliä alaspäin siirtämisen tekee siis koodi
with (ball) y += 8;
Jos tahdotaan suorittaa useita lauseita kerralla, niiden ympärille pitää pistää aaltosulkeet. Voit siis esimerkiksi siirtää kaikki ball-objektin instanssit sattumanvaraiseen sijaintiin seuraavalla koodilla:
with (ball) { x = random(room_width); y = random(room_height); }
Huomaa, että with-lauseen sisällä olevissa lauseissa instanssista on tullut self-instanssi. Alkuperäisestä self-instanssista eli with-lausetta kutsuneesta instanssista on taas tullut other-instanssi. Voit siis esimerkiksi siirtää kaikki ball-objektin instanssit nykyisen instanssin sijaintiin seuraavalla koodilla:
with (ball) { x = other.x; y = other.y; }
With-lausen käyttö on erittäin tehokasta. Tässä vielä pari esimerkkiä. Tuhotaksesi kaikki ball-objektin instanssit, käytä koodia
with (ball) instance_destroy();
Jos taas vaikkapa pommi räjähtää, ja haluat tuhota kaikki sen lähellä olevat instanssit, voit käyttää tällaista koodia:
with (all) { if (distance_to_object(other) < 50) instance_destroy(); }