maanantai 2. joulukuuta 2013

Kuudes tunti: Tasohyppelypelin aloittaminen

Tasohyppelypelit, kuten Super Mario, ovat jonkun verran pois muodista, mutta jokainen oppilas kuitenkin tuntee genren. Teemme ensimmäisellä kaksoistunnilla perusteet liikkumiselle, putoamiselle ja kentän vaihtumiselle. Viikon päästä lisätään kenttiä, taustakuvia, kävelyanimaatioita ja muuta sen sellaista.

Härkää sarvista ja aloittamaan.

Aloitan kentästä. Koska kyseessä on tasohyppely, piirrän kissalle ... tasoja. :) Ideana on kävellä ja hyppiä kentän vasemmasta laidasta oikeaan, jolloin kissa pääsee seuraavaan kenttään.


Kissa on perusasetuksilla jättimäinen tällaiseen peliin, joten pienennän sitä reippaasti


 Nyt kissa on suurinpiirtein oikeassa mittakaavassa kenttään nähden.


Sitten ryhdytään rakentamaan kissan liikuttelua. Oikea-vasen -liikuttelu tehdään samalla tavalla kuin rallipelissäkin. 


Haluan kissan putoavan alaspäin, joten pystysuuntaisen liikkeen aikaansaamiseksi teen uuden muuttujan.



"y vel" tulee sanoista Y velocity, eli pystysuuntainen nopeus. Ohjelmaan rakennetaan "painovoima", joka muuttaa pystysuuntaista nopeutta koko ajan. Kissa siis kiihtyy alaspäin mennessään. Kissan nopeus siis. ;) Skriptiä luetaan jatkuvasti ja joka kerta alaspäin suuntautuva nopeus kasvaa 0,3 askelta (toisin sanoen ylöspäin suuntautuva nopeus pienenee 0,3:lla askeleella eli se kasvaa -0,3 askelta). Ohjelma muuttaa hahmon y-sijaintia muuttujan y vel verran.


Jos nuolta ylöspäin painetaan, ylöspäin suuntautuva nopeus muuttuu 5:ksi. Vaikka se muuttuu 5:ksi, se lähtee pienenemään heti ja hetken päästä kissa alkaa taas pudota. Nuoli ylös saa siis aikaan hypyn.


 Kissa putoaa nyt kaikkien palkkien läpi, joten hahmolle pitää kertoa jotenkin minkä päällä voi seistä. Eli kissan koskettaessa mustaa väriä (tasoissa) putoaminen pysäytetään.


Kissan ylöspäin suuntautuvassa liikkeessä on kyse ennemminkin lentämisestä kuin hypystä, sillä kissa suuntaa kulkunsa ylöspäin riippumatta siitä, onko sillä jotain mistä ponnistaa vauhtia. Lisätään hyppykomentoon ja-lause, johon laitetaan hypyn onnistumisen ehdoksi mustan värin koskettaminen ja nuolinäppäimen painaminen.


Kissan pitäisi ilmestyä takaisin aloituskohtaan, kun se on pudonnut rotkoon. Muuten kenttää ei voida kokeilla uudelleen. Tämä tehdään jos-lauseella, joka aktivoituu hahmon pudotessa tietyn korkeuden alapuolelle. Kun y-sijainti on haluttua pienempi, lause nollaa nopeuden ja siirtää hahmon aloituskohtaan.


Tämänhetkisellä koodilla kissa kulkee tasojen läpi. Tämä ei ole toivottavaa ja se pitää saada estettyä jotenkin. Tämän voisi tehdä muuttujallakin, mutta tässä esimerkissä käytetään negaatiota eli ei-lausetta. 


Tasojen alareunat maalattiin ruskeaksi ja liikuttelun ehtoihin laitetaan ja-lauseen sisään nuolinäppäimen painaminen ja ei-ruskean koskettaminen. Tämä tarkoittaa siis sitä, ettei hahmoa saa liikutettua sivusuunnassa mikäli se koskettaa ruskeaa väriä.


Nyt kaikki alkaa olla hienosti. Kentän oikeasta reunasta pitäisi päästä seuraavaan kenttään, joten tehdään sinne samantyyppinen rajaus kuin y-suunnallekin. Jos hahmo menee tiettyä x-koordinaattia pidemmälle, se siirretään aloituskohtaan. Samalla skripti lähettää "Seuraava kenttä"-viestin.


Esiintymislavan täytyy olla ensimmäinen kenttä, kun peli aloitetaan. Kun sitten vastaanotetaan "Seuraava kenttä"-viesti, vaihdetaan tausta seuraavaksi.


Taustakuvissa pitäisi aloituskohdan olla aina samalla korkeudella. Tällöin ei tarvitse säätää putoamiskuolemalle ja seuraavan kentän aloitukselle mitään taustakohtaisia palautuskoordinaatteja. Tämä onnistuu helpoimmin kopioimalla tausta ja pyyhkimällä kaikki muu aloitustasoa lukuunottamatta pois.


Kopioinnin jälkeinen muokkaus

 Ja sitä seuraava muokkaus. Tähän teen liikkuvia tasoja, joiden päälle pitää pystyä hyppäämään.

Tässä harmaat tasot liikkuvat ylös- ja alaspäin eri tahdeissa.


"Odota kunnes"- palikka toimii jos-lauseen tavoin, mutta pysäyttää koodin siihen asti, että ehto täytetään. Laitan esiintymislavan ilmoittamaan viestillä, kun se vaihtaa esiintymislavaksi kolmosen. Tällä viestillä  saan aloitettua kenttiin kuuluvat animaatiot ja voin ohjata samoja hahmoja eri tavoin eri kentissä.


Harmaat tasot ovat kaksi erillistä hahmoa, joille teen omat skriptit. Kun peli aloitetaan, ne piilotetaan. En halua, että ne tulevat näkyviin ennen kolmatta kenttää, joten ne näytetään vasta kun "Kolmas kenttä"-viesti vastaanotetaan. Haluan hahmojen menevän vain ylös ja alas, joten laitan niille sellaiset skriptit. Toinen aloittaa menemällä ylöspäin, toinen alaspäin.

Tätä samaa jatketaan seuraavalla kerralla, lisään tunnin myöhemmin.



Ei kommentteja:

Lähetä kommentti