Lisää objekteista
Luodessasi objektin edistyneemmässä tilassa on sinulla mahdollisuus muuttaa useampia edistyneempiä
asetuksia.
Syvyys (Depth)
Ensinnäkin, pystyt asettamaan objektin instansseille syvyyden (depth). Kun instanssit piirretään
näytölle, ne piirretään syvyysjärjestyksessä. Instanssit, joilla on suurin syvyys, piirretään ensin,
kun taas pienempisyvyiset instanssit piirretään viimeiseksi. Jos instansseilla on sama syvyys,
piirretään ne luomisjärjestyksessä. Mikäli haluat olla varma siitä, että tietty instanssi piirretään
muiden instanssien päälle, kannattaa sille antaa negatiivinen syvyys. Mikäli taas haluat, että instanssi
piirretään muiden instanssien alle, anna sille suuri, positiivinen syvyys. Voit myös vaihtaa instanssin
syvyyttä kesken pelin käyttämällä depth-muuttujaa.
Pysyvät objektit
Voit tehdä objektista myös pysyvän (persistent). Pysyvä objekti pysyy pelissä, kun liikut huoneesta
toiseen. Se katoaa vain, jos se tuhotaan suoraan. Joten, jotta objekti olisi joka huoneessa, riittää,
että sen lisää ensimmäiseen huoneeseen. Tämä on hyödyllistä, jos pelissä on esimerkiksi päähahmo, joka
liikkuu huoneesta toiseen. Pysyvien objektien käyttäminen on tehokasta, mutta se johtaa myös helposti
virheisiin.
Isäntäobjektit (Parents)
Jokaisella objektilla voi olla isäntäobjekti. Jos objektilla on isäntä, se perii sen käyttäytymisen.
Toisin sanoen, objekti on eräänlainen isäntäobjektin erikoistapaus. Esimerkiksi, jos sinulla on 4
erilaista palloa nimiltään pallo1, pallo2, pallo3 ja pallo4, jotka käyttäytyvät samalla lailla, mutta
niiden kuvat (sprite) ovat erilaiset, voit tehdä pallo1:stä isännän kolmelle muulle pallolle. Nyt sinun
tarvitsee tehdä tapahtumat vain pallo1:lle. Muut kolme palloa perivät nämä tapahtumat ja käyttäytyvät
täsmälleen samoin kuin niiden isäntä. Myös silloin, kun luot toimintoja isäntäobjektin instansseille,
ne toimivat myös isännän lapsilla. Siis, jos esimerkiksi tuhoat kaikki pallo1:n instanssit, tuhoutuvat
myös pallo2:n, pallo3:n ja pallo4:n instanssit. Tämä säästää paljon työtä ja aikaa.
Useimmiten objektien tulisi käyttäytyä lähes identtisesti, vain pienillä eroilla. Esimerkiksi yksi
vihollinen voi liikkua ylös ja alas, mutta toinen oikealle ja vasemmalle. Muuten käyttäytyminen on
täysin samanlaista. Tässä tapauksessa suunnilleen kaikkien tapahtumien tulisi sisältää samat toiminnot,
mutta muutamassa toiminnossa saattaa olla eroja. Tehdään siis jälleen yksi objekti isännäksi toiselle.
Edellisestä esimerkistä poiketen lisäämmekin myös lapsiobjektille muutaman tapahtuman. Nämä tapahtumat
"kumoavat" isäntäobjektin tapahtumat. Aina, kun lapsiobjekti sisältää toimintoja, nämä
suoritetaan siis isännän toimintojen sijaan. Jos haluat suorittaa myös isäntäobjektin tapahtuman,
voit käyttää niin sanottua "perimätapahtumaa" käyttämällä oikeaa toimintoa.
On oikeastaan hyödyllistä tehdä tällaisissa tapauksissa luoda yksi perusobjekti. Tällainen perusobjekti
sisältää kaikki oletuskäyttäytymiset, mutta sitä ei ikinä käytetä itse pelissä. Kaikki todelliset
objektit saavat tämän objektin isännäkseen. Isäntäobjekteillakin voi olla isäntiä ja niin edelleen.
(Kehien tekeminen ei kuitenkaan ole sallittua.) Näin voit luoda objektihierarkioita. Tämä on erittäin
käytännöllinen tapa pitää peli koossa ja sen opettelu onkin todella suositeltavaa.
Isäntäobjekteille on myös toinen käyttötapa. Se myös periyttää törmäyskäyttäytymisen (Collision) muille
objekteille. Selvennetään tätä seuraavalla esimerkillä. Oletetaan, että on neljä erilaista
lattiaobjektia. Kun pallo osuu lattiaan, se vaihtaa suuntaa. Tämä täytyy määrittää pallon
törmäystapahtumassa. Koska nyt on neljä erilaista lattiaa, täytyy koodi sijoittaa jokaiseen
törmäystapahtumaan erikseen. Jos kuitenkin teet yhden perusobjektin ja laitat kaikille lattioille tämän
perusobjektin isännäksi, tarvitsee sinun tehdä törmäystapahtuma vain tämän perusobjektin kanssa. Tämä
tapahtuma periytyy perusobjektin lapsille. Tämä säästää jälleen paljon aikaa turhalta kopioinnilta.
Kuten aiemmin mainittiin, aina kun käytät objektia, vaikutus kohdistuu myös sen lapsiin. Tämä tapahtuu,
kun ilmoitat toiminnossa, että se on suoritettava kaikille tietyn objektin instansseille. Näin käy myös,
kun käytät with-lausetta koodissa (tästä myöhemmin lisää). Lisäksi se toimii, kun kutsut
tiettyjä funktioita, kuten instance_position ja instance_number. Lopuksi se vaikuttaa
myös, kun viittaat toisten objektien muuttujiin. Jos olisit yllä olleessa esimerkissä asettanut
muuttujan ball1.speed arvoksi 10, se olisi myös vaikuttanut objekteihin ball2, ball3 ja ball4.
Maskit (Masks)
Kun kaksi instanssia törmäävät, suoritetaan törmäystapahtuma. Siihen, leikkaavatko kaksi instanssia
toisiaan, käytetään niiden kuvia. Tämä on useimmissa tapauksissa oikein, mutta joskus törmäykset voidaan
haluta tarkistaa eri muotoisen kuvan mukaan. Esimerkiksi, jos teet isometristä peliä, objekteilla on
usein korkeus (jotta ne näyttäisivät kolmiulotteisilta). Törmäyksissä tahdot kuitenkin käyttää sen
maahan osuvaa osaa. Tämä onnistuu tekemällä erillinen kuva, jota käytetään objektin törmäysmaskina.
Tiedot (Information)
Show Information (Näytä tiedot) -näppäin antaa yleiskatsauksen kaikesta objektin tiedoista, ja
nämä tiedot voi myös tulostaa. Tämä on erityisen kätevää, kun et enää ole täysin perillä kaikista
toiminnoista ja tapahtumista.