torstai 14. marraskuuta 2013

Neljäs tunti, autopelin animointi ja parantelu

Tällä tunnilla on tarkoitus animoida auton liike ja "ulosajo", tehdä parhaan kierrosajan näyttävä "tulostaulu", sekä viimeistellä pelin ulkonäkö ja pelattavuus.

Paras kierrosaika


Tehdään uusi muuttuja "paras kierrosaika". Kirjoitin sen pienellä, koska kun hahmon nimi on "Punaisen", tulee tulostauluun "Punaisen paras kierrosaika". Tämä muuttuja on vain tälle hahmolle, joten samaa skriptiä voidaan käyttää myös "Sinisen"-hahmolle.

Aloitan skriptin vihreällä lipulla. Asetetaan muuttuja riittävän korkeaksi, jotta se on helppo alittaa. Seuraavaksi nollataan ajastin ja aloitetaan ikuisesti ehtoa tarkistava silmukka. Silmukan sisään laitan jos-lauseen, johon laitetaan tuntoaisti-kategoriasta valkoisen värin tunnistava ehto. Nyt jos-lauseen sisältö luetaan vain, kun hahmo koskettaa valkoista väriä.
 Lisään jos-lauseen sisään jos-muuten-lauseen. Tämä suorittaa jos-osuuden silloin kun jos-lauseen ehto täyttyy, muulloin suoritetaan "muuten"-lause.
 Tutustuimme "Toiminnot"-kategoriaan. Sen sisältä löytyvät yleisimmät laskutoimitukset, kahden muuttujan vertailu ja loogiset lauseet.
 Koska haluan verrata kierrosaikoja keskenään, otan käyttöön "pienempi kuin"-lauseen. Lause vedetään jos-lauseen ehdoksi.
 Tuntoaisti-kategoriasta löytyy ajastin, joka voidaan vetää lauseen vasemmalle puolelle.
 Oikealle puolelle vedän muuttujat-kategoriasta "paras kierrosaika"muuttujan. Muuttujalle annettiin arvoksi 30 tämän skriptin alussa, joten nyt hahmon ylittäessä maaliviivan jos-lause vertaa ajastimen lukemaa alussa annettuun arvoon 30.
 Jos ajastimen lukema on pienempi, "paras kierrosaika"-muuttuja asetetaan ajastimen arvoon. Seuraavalla kierroksella ajastimen lukemaa verrataan tähän edelliseen aikaan.

 Jos ajastimen arvo ei olekaan pienempi, skripti suorittaa muuten-lauseen. Nyt hahmo sanoo "Ei suju!", mikäli ei onnistu alittamaan edellistä parasta aikaa.
 Lisätään vielä ensimmäisen jos-lauseen loppuun ajastimen nollaus, jotta ohjelma ryhtyy kellottamaan uutta kierrosta aina kun maaliviiva on ohitettu. Jos tähän ei lisätä viivettä parhaaksi kierrosajaksi tulee 0 sekuntia, sillä ohjelma ehtii tarkistaa jos-lauseen monta kertaa auton ylittäessä maaliviivan. Lisäämällä sekunnin viive ajastimen nollauksen jälkeen, auto ylittää viivan ja uusi "paras kierrosaika" on oikeasti paras kierrosaika.
 Olisi hölmöä, jos ohjelma väittäisi aluksi parhaaksi kierrosajaksi 30 sekuntia. Ongelma poistuu lisäämällä "Piilota muuttuja"-palikka alkuun ja "Näytä muuttuja" maaliviivan ylittämisen jälkeen. Nyt parasta kierrosaikaa ei näytetä ennen kuin sellainen on ajettu.
 Tulostaulun voi laittaa haluamalleen kohdalle ruutua.
 Jotta paras aika saadaan näkyviin myös siniselle hahmolle, se voidaan vetää punaiselta hahmolta siniselle.
"paras kierrosaika"-muuttuja täytyy käydä klikkaamassa aktiiviseksi Muuttujat-kategoriasta.

Animoinnit

Animoidaan ensin auto. Tehdään alkuperäisestä autosta pari-kolme erilaista versiota, jossa liikettä voi yrittää saada näkyväksi liikuttamalla koria renkaiden suhteen ja laittamalla pieniä pakokaasutuprahduksia auton takaosaan. Muokkaan ensimmäistä autohahmoa hieman.
 Pieni pakokaasutuprahdus.
 Tämän jälkeen kopioin ensimmäisen auton ja teen siihen lisää muokkauksia. Toistan työn ja teen kolmannenkin asusteen. Renkaat liikkuvat hieman ja pakoputkesta tulee mustia pisteitä.
 Aloitan uuden skriptin, joka ohjaa vain liikkettä. Kun vihreää lippua klikataan, asuste vaihtuu ensimmäiseen asusteeseen ja skripti odottaa 0,1 sekuntia.
 Kopioin palikat ja vaihdan kopioituihin palikoihin asuste1-kohdan asuste2:ksi ja asuste3:ksi

 Animoidaan myös törmäykset. Aiemmin on tehty alla oleva skripti, joka kadottaa hahmon näkyvistä, kun se osuu vihreälle pohjalle. Jos autolle halutaan tehdä törmäysanimaatio, se täytyy laittaa ehdolliseksi muun animoinnin mukaan. Muuten ohjelma yrittää pyörittää kahta animaatiota päällekkäin. Siirretään alla olevasta skriptistä jos-lause liikeanimaation mukaan.
 Nyt liikeanimaatiossa on mukana ehdollinen "Jos hahmo osuu vihreään"-kohta.


 Siirretään alussa ollut ollut "Mene kohtaan"-palikka liikkumiseen tarkoitetun skriptin alkuun.

Kopioin taas auton ja teen neljä erilaista räjähdys/palamiskuvaa



 Nyt kun asusteet ovat valmiit, lisään ne "Jos koskettaa vihreää"-ehtolauseen sisään. Asu vaihtuu 0,2 sekunnin välein, kunnes auto katoaa näkyvistä 0,2 sekunnin ajaksi ja ilmestyy lähtöpisteeseen. Asuste pitää vaihtaa takaisin asuste1:ksi ennen siirtoa, muuten asu vaihtuu vasta kun hahmo on näkyvissä. Suurempi asuste lähtöpaikalla ylittää helposti lähtöviivan, jolloin parhaat ajat ja kierrosluvut menevät miten sattuu.





  Nyt ohjelmassa on virhe. Kun auto törmää seinään, sen pitäisi palaa paikallaan ja siirtyä sitten alkupisteeseen. Tällaisenaan ohjelma antaa ohjata palavaa autoa vielä eteenpäin. Lisätään liike-skriptiin ehtolause, joka pysäyttää auton sekunniksi sen osuessa vihreälle alustalle.


 Koska olen laiska, en halua animoida sinistä autoa erikseen. Poistan vanhan sinisen auton kopioin punaisen auton skripteineen päivineen, nimeän kopion "Sinisen"-nimiseksi ja vaihdan ohjaamiseen tarvittavat nappulat.

 Jokainen asuste pitää maalata uudelleen erikseen, mutta tästä ei ole juurikaan vaivaa.

 Yksi oppilaista ehdotti lähtölaskennan rakentamista. Tämä tehdään omana hahmonaan, jolle tehdään neljä erilaista asustetta.
 Asuste vaihtuu 0,2 sekunnin (vaihdettiin myöhemmin 0,5 sekuntiin) välein sen jälkeen, kun vihreää lippua on painettu. Nyt tulee kuitenkin ongelma, kun ajastimet ja kellot lähtevä myös käyntiin vihreästä lipusta. Asia korjataan Ohjaus-kategoriasta löytyvällä "Lähetä"-palikalla. Tämä lähettää signaalin, jolla voi aloittaa muita skriptejä. Tämä ei suinkaan ole pakollinen tässä, mutta harjoituksen vuoksi käytämme tätä. Eli: Lähetyshahmo laskee 3, 2, 1, AJA! ja skripti lähettää Aja-signaalin.

 Vaihdoin kaikkiin muihin skripteihin aloituspalikaksi "Kun vastaanotan 'Aja'"

 Aloitushahmon asusteet vaihtuivat vähän liian nopeasti 0,2 sekunnin odotusajalla, joten se nostettiin 0,5 sekuntiin. Nyt vihreää lippua painamalla ohjelma näyttää hahmon, vaihtaa asustetta 0,5 sekunnin välein, lähettää Aja-signaalin viimeisen asusteen vaihduttua, näyttää tuota asustetta 0,5 sekuntia ja menee piiloon.
 Tähän tuli taas ideoita oppilailta, joten nyt yritetään saada Aja!-teksti katoamaan tyylikkäästi pyörähtäen kaukaisuuteen. Ensin hahmo laitetaan normaalikokoiseksi ja osoittamaan oikeaan suuntaan. Aja!-teksti näkyy yhden sekunnin, kääntyy sen jälkeen 5 astetta myötäpäivään ja pienenee 5 askelta. Kääntöä ja pienennystä toistetaan 20 kertaa, jonka jälkeen hahmo häviää. Mikäli alkuun ei laiteta näytä-komentoa, eikä kokoa ja suuntaa oikeiksi, seuraava peli alkaa pienemmällä ja kääntyneellä hahmolla.

 Tietokoneluokassamme ei ole kaiuttimia koneissa, joten äänipuolen jätän kokonaan tyhjäksi. Jotkut oppilaat tekivät päristelyefektit mikrofonin kanssa. Itsetehdyt efektit olivat erittäin hauskan kuuloisia.

Esimerkkirallia voi käydä ihastelemassa täällä.




Ei kommentteja:

Lähetä kommentti