Tehdään Peli Part 5

Tässä jaksossa kerrataan miten pelaaja lisättiin ja tällä kertaa muistetaan myös tallentaa muutokset. Jakso on jaettu neljään osaan koska asiaa tuli tavallista enemmän. Alla oleva video lähtee siis liikkeelle samasta kohtaa kuin edellinenkin. Samat asiat tehdään, mutta hieman eri järjestyksessä. Ensin siis lisätään KinematicBody2D, CollisionPolygon2D ja Sprite.

Toisessa osassa lisätään mappaukset näppäimiin. Ohjaus on hyvin yksinkertainen ja alus liikkuukin vain x-akselilla eli oikealle ja vasemmalle. Pelaajan noodiin lisätään skripti ja sinne ensimmäiset rivit koodia.

Tässä alla olevassa osassa jatketaan koodausta. Lisätään pelaajan skriptiin aluksen liikutus. Käytännössä siis katsotaan mitä nappia pelaaja milloinkin painaa käyttäen apuna noita aikaisemmin lisättyjä mappauksia.

Viimeisessä osassa lisätään fysiikka tai oikeastaan pelaajan varsinainen liikkuminen. Toisinsanoen otetaan käyttöön edellisen osan get_input() -metodi ja annetaan saatu liikevektori move_and_slide() -metodille.

Tässä jaksossa valittu tapa liikuttaa pelaajaa ei ole optimaalinen tämän tyyppiseen peliin. Tämä ongelma kuitenkin ratkaistaan myöhemmissä osissa. Jotta kuitenkin tulisi parempi käsitys siitä miksi valittiin nyt fysiikan prosessointi ja tämä ns. liike ja liuku niin käyn sitä hieman alla vielä läpi.

Aloitetaan _physics_process(delta) -metodista. Kyseistä metodia kutsutaan vain mikäli fysiikkaprosessointi on kytkettynä päälle. Tämä tapahtuu automaattisesti kun me lisätään metodi meidän skriptiin. Puhutaan niin sanotusti sisäisen metodin ylikirjoittamisesta. Fysiikan prosessointi käytännössä tarkoittaa että ruudunpäivitys on synkronoitu fysiikkaan eli parametrina saatu deltan arvo on vakio. Delta on sekunteja. Verrokkina _process(delta) -metodi jossa prosessointi tapahtuu joka ruudunpäivityksessä ja aina niin nopeasti kuin mahdollista. Tässä tapauksessa delta ei ole vakio vaan vaihtelee riippuen tilanteesta.

_move_and_slide() -metodi liikuttaa pelaajaa tai oikeammin liu’uttaa. Tätä metodia pitäisi aina kutsua _physics_process() -metodin sisältä (tässä syy miksi). Kaikessa lyhykäisyydessään tämä metodi siis liikuttaa objektia annetun vektorin mukaisesti ja mikäli tapahtuu törmäys, objekti ei pysähdy vaan liukuu törmäyspintaa pitkin. Tällainen liike on valitun pelityypin kannalta täysin turhaa ja lisää kompleksisuutta (tässä syy miksi ei). Parempi valinta liikkumiseen olisi _process(delta) -metodin kautta kutsua _move_and_collide() -metodia. Tästä kuitenkin lisää myöhemmissä jaksoissa. Näiden liikemetodien parametreihin voit tutustua tarkemmin Godotin dokumentaatiossa.

Pelissä ei tietystikään tule olemaan kummoista fysiikkaa ja kuten mainitsin: näihin asioihin palataan myöhemmin ja parannetaan pelin koodia. Valitsin kuitenkin tämän lähestymistavan jotta nämä kaksi erilaista tapaa tulisivat tutuksi. Liuku siis sopii paremmin vaikkapa tasohyppelyyn.

Seuraavassa jaksossa laitetaan pikseliasetukset kuntoon grafiikan osalta.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: