- Kloonien luonti
Tutustutaan klooneihin eli hahmoihin, joiden toiminnallisuus on toteutettu kerran, mutta joita tietokone osaa samalla reseptillä luoda äärettömän määrän.
- Ensimmäinen klooni luodaan
Scratchissä hahmot ja sen kloonit ovat kaksi eri asiaa. Jos niiden haluttaisiin toimivan samoin täytyisi samat toiminnallisuudet ohjelmoida erikseen kummallekin. Ohjelmoidaan nyt kuitenkin kaikki vain klooneille ja piilotetaan alkuperäinen hahmo.
- Luodaan klooneja jatkuvasti
Odota aina hetki kloonien luonnin välissä.
- Kloonin paikan määritys
Opitaan käyttämään muuttujia apuna numeroiden muistamiseen.
Tutustutaan koordinaatiston kolmanteen ulottuvuuteen.
- Tee hahmokohtaiset muuttujat 3D-x, 3D-y ja 3D-z
Muuttujien pitää olla hahmokohtaisia, muuten ne ovat samat jokaiselle kloonille kun käytännössä kunkin kloonin pitää muistaa oma sijaintinsa.
- Alusta muuttujat kloonin syntyessä
Asetetaan klooni syvyyteen z=200. Muuttujille x ja y arvotaan sijainti, joka voi olla esimerkiksi puolet esiintymislavasta (-120->120, -90->90).
- Kloonin sijoitus ja nousu pohjasta
Äsken toteutettiin kloonin kolmiulotteinen sijainti, mutta se on aivan eri asia kuin kloonin sijainti 2D-näytöllä. 3D-koordinaatistosta voi laskea kaikille pisteille näyttökoordinaatit, mutta kun kloonin x- ja y-näyttökoordinaatteja nyt asetetaan niin älä muuta kloonin 3D-sijainnin muistavia muuttujia.
Jos trigonometria on jo tuttua niin tässä vaiheessa voi itse laskea miten 3D-koordinaateista saa 2D-näyttökoordinaatit.
Hahmotusapua täältä.
- Aseta klooni kohdalleen
aseta x:lle arvo 200 * 3D-x / 3D-z
aseta y:lle arvo 200 * 3D-y / 3D-z
- Siirrä kloonia hieman korkeammalle pohjasta
3D-x ja 3D-y pysyvät pelissä jatkuvasti samoina, mutta hahmon noustessa pohjasta korkeammalle niin 3D-z muuttuu (esim. -2 yksikköä). Mitä enemmän hahmoa nostetaan kerrallaan pohjasta sitä nopeammin se liikkuu myös pois näkyvistä.
- Piirrä ja siirrä kloonia vuorotellen kunnes se häviää näkyvistä
Laita edelliset piirto- ja siirtokomennot toisto-silmukan sisälle. Toistetaan niitä kunnes z < 0 tai klooni koskettaa reunaan.
- Poista klooni silmukan jälkeen
- Kloonin koon muuttaminen
Asetetaan kloonin koko oikeaksi aina samalla kun sen paikka asetetaan. Kloonin 3D-z etäisyyden käänteisluku vastaa kokoa tarpeeksi hyvin 3D-simulaatiota varten. Mitä suurempi kloonin etäisyys, sitä pienempänä se piirretään. Täsmällisen etäisyyden voi laskea myös trigonometrian avulla: etäisyys = neliöjuuri ( 3D-x * 3D-x + 3D-y * 3D-y ), mutta laskun toteutus Scratchissä on turhan työlästä. Jos laskussa käytetään täsmällistä etäisyyttä niin kuplat kannattaa myös sijoittaa alussa kauemmaksi kuin 200 yksikön päähän.
Kerro etäisyys sopivalla arvolla, jotta klooni on hyvän kokoinen.
- Aseta klooni taaimmaiseksi sen syntyessä
Scratchissä ei ole suoraan komentoa tähän, mutta voit laittaa kloonia taaksepäin sen verran, että se varmasti on taaimmaisin.
- Klooni siirtyy noustessaan
Kloonin ensimmäinen skripti käsittelee sen piirtämistä sijainnin perusteella. Jotta se ei paisuisi tavattoman pitkäksi ja hankalalukuiseksi niin luodaan siirtyminen omaksi skriptikseen uuden "kun aloitan kloonina"-tapahtuman alle.
Nyt puhutaan kuplan oikeasta, kolmiulotteisesta sijainnista, joten sijaintia muokatessa muutetaan muuttujia 3D-x ja 3D-y.
- Kloonin täsmällinen paikka vaihtelee satunnaisesti hieman
Esimerkiksi vedessä nousevat kuplat eivät nouse aivan tasaisesti. Ne eivät ole fyysisesti kiinteitä kappaleita ja niiden hetkittäisestä muodosta ja ylläolevasta veden määrästä riippuen niille vähimmän vastuksen reitti ei ole välttämättä suoraan ylöspäin.
JA / TAI
- Klooni liikkuu itsenäisesti johonkin suuntaan
Syynä tälle voi olla esimerkiksi virtaus tai kloonin oma tahto siirtyä jotain kohti tai muuten vain liikuskella.
- Klooneja kerätään tai ammutaan
Kloonien keräys normaalinäkymässä voi olla hankalaa, koska osa klikkailuista saatetaan mieltää raahauksiksi. Tätä vaihetta voi olla parempi testata esiintymislavanäkymässä, minkä saa pelin nimen vierestä
-nappulasta.
- Klooni poistuu jos sitä klikataan
- Tee muuttuja "pisteet" tai "elinvoima"
Pelissä voi joko perinteisesti kerätä pisteitä tai keräämisen motivaatio voi olla pysyä elossa/tajuissaan. Esimerkkeinä elinvoimasta ruoan sisältämä energia tai vedessä kuplien sisältämä ilma.
- Muuta muuttujan arvoa osumasta
Voit antaa enemmän pisteitä tai elinvoimaa jos osuttiin kauempana olevaan hahmoon. Osumasta voi siis esimerkiksi lisätä muuttujan arvoa etäisyyden, 3D-z, verran. Jos etäisyys on suuri niin saadaan paljon pisteitä, jos se taas on pieni niin saadaan vähemmän pisteitä.
Seuraavat vain elinvoimaa toteutettaessa:
Elinvoima on pelaajan ominaisuus eikä niinkään kuplan. Koska pelaajalle ei ole omaa hahmoa niin voit tehdä seuraavat toiminnot suoraan esiintymislavalle.
- Alusta elinvoiman määrä maksimiinsa pelin alussa
- Pienennä elinvoiman määrää jatkuvasti
- Aseta elinvoiman määrälle maksimi
Jos elinvoimaa on liikaa niin asetetaan elinvoiman määrä maksimiinsa.
- Pysäytä peli jos elinvoima menee negatiiviselle
- Haavi tai ase klooneja keräämään
Vaikka pelaaja istuukin näytön toisella puolella niin voimme kuitenkin sijoittaa näytön alalaitaan pelaajan kädessä olevan haavin tai aseen.
- Aseta valittu työkalu näkymän alalaitaan
- Aseta työkalu aina osoittamaan hiiriosoitinta
Jos työkalun väärä puoli osoittaa hiiriosoitinta päin niin käännä piirrettyn kuvan asustetta niin, että työkalu osoittaa kuvassa oikealle.
- Elinvoiman loppumiselle lopetusnäkymä
- Pelin pysäyttämisen sijasta lähetä viesti GameOver
- Viestin lähettämisen johdosta pysäytä esiintymislavan ja pelaajan työkalun skriptit
- Jäädytetään kloonien luonti ja liike
- Tee leima jokaisesta kloonista
Kukin klooni voi vastaanottaa lähetetyn viestin ja leimata itsensä näkyviin. (Itse kloonit häviävät kun niiden toiminta pysäytetään.)
- Pyyhi näkymä aina pelin aluksi
- Pysäytä kaikki kerättävän hahmon toiminnot lopuksi
- Tehdään peliin tuomari
Tutustutaan merkkijonojen katenointiin eli yhdistämiseen.
- Aseta tuomari näkymään vasta pelin lopussa
Tuomari piilotetaan pelin alkaessa ja asetetaan esiin kun vastaanotetaan viesti 'GameOver'.
- Tuomari sanoo miten kauan selvittiin
Pelin alussa on käynnistynyt ajastin (tuntoaisti). Tuomari voi nyt yhdistää tarvittavat tekstit sanoakseen kokonaisen lauseen missä haetaan myös ajastimen sen hetkinen arvo.