Liikkuminen

Yksi tärkeä pelien osa-alue on tottakai instanssien liikuttaminen paikasta toiseen. Jokaisella instanssilla on kaksi sisäänrakennettua muuttujaa, x ja y, jotka ilmoittavat instanssin sijainnin. (Tarkalleen ottaen ne ilmoittavat myös, missä on kuvan origo.) Sijainti (0,0) on huoneen ylävasen kulma. Voit muuttaa instanssin sijaintia muuttamalla sen x- ja y-muuttujien arvoa. Jos haluat objektin liikkuvan monimutkaisemmin, tämä on tapa tehdä se. Tämä koodi laitetaan tyypillisesti objektin askeltapahtumaan (Step).

Jos objekti liikkuu vakionopeudella koko ajan samaan suuntaan, tähän on helpompi toteutustapa. Jokaisella objektin instanssilla on vaakasuuntainen nopeus (hspeed) ja pystysuuntainen nopeus (vspeed). Molemmat ilmoitetaan pikseleinä askelta kohti. Positiivinen vaakasuuntainen nopeus merkitsee liikettä oikealle, kun taas negatiivinen nopeus liikettä vasemmalle. Positiivinen pystyliike on liikettä alaspäin ja negatiivinen vuorostaan liikettä ylöspäin. Nämä muuttujat täytyy siis asettaa vain kerran (esimerkiksi luomistapahtumassa (Create)), jotta objektin instanssit saisivat tasaisen vakioliikkeen.

On myös hyvin erilainen liikkeen määrittelytapa, nimittäin suunnan (asteluku väliltä 0-360) ja nopeuden (pitäisi olla positiivinen) avulla. Voit asettaa nämä muuttujat ja lukea niistä liikkeen määrittämiseksi. (Nämä arvot muutetaan sisäisesti arvoiksi, jotka sijoitetaan muuttujiin hspeed ja vspeed.) Myös kitkalle, painovoimalle ja sen suunnalle on omat muuttujat. Lopuksi funktiolla motion_add(dir,speed) voidaan lisätä liikettä jo olemassa oleva liike huomioiden.

Jokaisella instanssilla on seuraavat niiden sijaintiin liikkumiseen vaikuttavat muuttujat ja niihin voidaan käyttää seuraavia niitä muuttavia funktioita:

x Instanssin x-sijainti.
y Instanssin y-sijainti.
xprevious Instanssin edellisen askeleen x-sijainti.
yprevious Instanssin edellisen askeleen y-sijainti.
xstart Instanssin aloituspaikan x-sijainti.
ystart Instanssin aloituspaikan y-sijainti.
hspeed Instanssin vaakasuuntainen nopeus.
vspeed Instanssin pystysuuntainen nopeus.
direction Instanssin nykyinen liikesuunta (0-360, vastapäivään, 0 = suoraan oikealle).
speed Instanssin nykyinen nopeus (pikseliä askelta kohti).
friction Instanssin nykyinen kitka (pikseliä askelta kohti).
gravity Instanssin nykyinen painovoima (pikseliä askelta kohti).
gravity_direction Painovoiman suunta (270 on suunta alaspäin).
motion_set(dir,speed) Asettaa liikkeen valittuun suuntaan dir nopeudella speed.
motion_add(dir,speed) Lisää ennestään olemassa olevaan liikkeeseen liikkeen suuntaan dir nopeudella speed (vektorien yhteenlaskulla).

Liikkeiden suunnittelussa auttavia funktioita on suuri määrä:

place_free(x,y) Ilmoittaa, onko sijaintiin (x,y) sijoitettu instanssi vapaa törmäyksistä muiden kiinteiden instanssien kanssa. Tätä toimintoa käytetään usein tarkistuksena ennen uuteen sijaintiin siirtymistä.
place_empty(x,y) Ilmoittaa, onko sijaintiin (x,y) sijoitettu instanssi vapaa törmäyksistä minkä tahansa instanssin kanssa. Tämä toiminto ottaa siis myös ei-kiinteät instanssit huomioon.
place_meeting(x,y,obj) Ilmoittaa, törmääkö instanssi, joka sijoitetaan sijaintiin (x,y), objektin tai instanssin obj. obj voi olla objekti, jolloin funktion arvo on true jos minkä tahansa kyseisen objektin instanssin kanssa törmätään. Se voi olla myös instanssin id-arvo, erityissana all, jolla tarkoitetaan mitä tahansa instanssia, tai erityissana other.
place_snapped(hsnap,vsnap) Ilmoittaa, onko instanssi kohdistettu annettujen arvojen mukaiseen ruudukkoon.
move_random(hsnap,vsnap) Siirtää instanssin vapaaseen, sattumanvaraiseen sijaintiin, joka on kohdistettu annettujen arvojen mukaiseen ruudukkoon, kuten vastaava toiminto.
move_snap(hsnap,vsnap) Kohdistaa instanssin annettujen arvojen mukaiseen ruudukkoon, kuten vastaava toiminto.
move_wrap(hor,vert,margin) Sitoo instanssin, kun se on poistunut huoneesta, sen toiselle puolelle. hor ilmoittaa, pitäisikö instanssi sitoa vaakasuunnassa ja vert, pitäisikö se sitoa pystysuunnassa. margin ilmoittaa, kuinka paljon instanssin origon tulee olla huoneen ulkopuolella, ennen kuin se sidotaan sen ympäri. Se on siis huoneen ympärillä oleva reunus. Tätä toimintoa käytetään usein Outside Room (Huoneen ulkopuolella) -tapahtumassa.
move_towards_point(x,y,sp) Siirtää instanssia nopeudella sp sijaintia (x,y) kohti.
move_bounce_solid(adv) Asettaa instanssin kimpoamaan kiinteistä instansseista, kuten vastaava toiminto tekee. adv ilmoittaa, pitäisikö käyttää tarkempaa kimpoamista, joka ottaa myös vinot seinät huomioon.
move_bounce_all(adv) Asettaa instanssin kimpoamaan kiinteiden instanssien sijaan kaikista instansseista.
move_contact_solid(dir,maxdist) Siirtää instanssia suuntaan dir, kunnes se törmää kiinteään objektiin. Jos nykyisessä kohdassa ei ole törmäystä, instanssi asetetaan juuri ennen törmäystä olevaan sijaintiin. Jos nykyisessä kohdassa taas on jo törmäys, instanssia ei siirretä. Voit määrittää siirtymän enimmäismäärän (käytä negatiivista lukua loogiseen liikkeeseen?).
move_contact_all(dir,maxdist) Tämä funktio toimii samoin kuin edellinen funktio, mutta tällä kertaa instanssi pysähtyy myös muihin kuin kiinteisiin objekteihin törmätessään.
move_outside_solid(dir,maxdist) Siirtää instanssia suuntaan dir, kunnes se ei enää sijaitse kiinteän objektin sisällä. Jos nykyisessä kohdassa ei ole törmäystä, instanssia ei siirretä. Voit määrittää siirymän enimmäismäärän (käytä negatiivista lukua loogiseen liikkeeseen).
move_outside_all(dir,maxdist) Tämä toiminto toimii samoin kuin edellinen funktio, mutta tällä kertaa instanssia siirretään kaikkien objektien sisältä pois, ei ainoastaan kiinteiden.
distance_to_point(x,y) Ilmoittaa etäisyyden nykyisen instanssin törmäyslaatikon laidasta sijaintiin (x,y).
distance_to_object(obj) Ilmoittaa etäisyyden instanssista lähimpään objektin obj instanssiin.
position_empty(x,y) Ilmoittaa, onko sijainti (x,y) tyhjä.
position_meeting(x,y,obj) Ilmoittaa, sijaitseeko sijainnissa (x,y) instanssi obj. obj voi olla objekti, instanssin id tai jokin avainsanoista self, other tai all.