tiistai 23. joulukuuta 2014

Viimeinen kerhokerta 15.12.

Viimeisellä kerralla jatkettiin kesken jääneitä pelejä. Useiden kerholaisten toivomuksesta meloninheittopeliin lisättiin mahdollisuus ampua meloneita, jolloin siitä tuli eräänlainen savikiekkoammuntasimulaatio.

Yksi melko helppo tapa toteuttaa ampuminen olisi hiirellä klikkaamalla. Se tekisi pelistä turhan helpon, ellei kohde lentäisi hyvin nopeasti ja yllättävästi. Sen sijaan tehtiin vähän monimutkaisempi järjestelmä, jossa ammus näyttää lentävän pelaajasta melonia (tai savikiekkoa) kohti. Kun hiirellä klikataan, painetaan muistiin klikkauskohdan koordinaatit asettamalla kaksi uutta muuttujaa (x ja y). Ammuksen lentorata lähtee samasta x-koordinaatista kuin mihin pelaaja klikkasi, mutta sen y-koordinaatti on aluksi näytön alareunassa ja kasvaa kohti klikkauskohdan y-koordinaattia. Kun ammuksen koko samalla pienenee, se näyttää lentävän kauemmas pelaajasta.

Seuraavassa skriptissä palikka "muuta y:n arvoa" voi vaatia miettimistä. Ensinnäkin, kun ammus lähtee alareunasta y-koordinaatista -200, sen on kuljettava y + 200 askelta ylöspäin: ensinnäkin 200 askelta, jotta se pääsee nollatasolle, sitten y askelta, jotta se pääsee hiiren klikkauksen koordinaattiin asti. Vaikka hiirtä klikattaisiin nollatason alapuolella, sama laskutoimitus sopii, koska silloin y on negatiivinen. Toiseksi, kun tämä kuljettava askelmäärä jaetaan usealle toistokerralle, kokonaismäärä pitää jakaa toistokertojen lukumäärällä. Seuraavassa toistokertoja on 10, joten kaikkiaan ammusta pitää siirtää ylöspäin (y + 200) / 10 askelta.


Milloin melonin pitäisi räjähtää? Helppo ratkaisu on räjäyttää se heti, kun se koskettaa ammusta, mutta tämä voi tehdä pelistä liian helpon. Haastavampi peli saadaan aikaan, kun vain tarpeeksi kauas edennyt ammus voi osua kohteeseen. Tämän voi toteuttaa monella tavalla: ammuksen skripti voi asettaa muuttujan, lähettää viestin tai vaihtaa ammuksen ulkoasua, kun ammus on tarpeeksi kaukana. Oheisessa esimerkkipelissä on valittu viimeinen vaihtoehto: ammus räjähtää ja muuttaa ulkoasua, ja meloni tietää tuhoutua jos se koskettaa räjähtäneen ammuksen väriä.


Tässä vielä ohjaajan mallipeli, jossa nämä skriptit yhdistetään aiempaan lennätykseen:  meloninammunta.

tiistai 9. joulukuuta 2014

Lentoratoja

Kerhossa mietittiin tällä kertaa, miten esineen saisi lentämään luonnollisen näköistä rataa. On helppo laittaa hahmo etenemään suoraviivaisesti (lisäämällä sekä x- että y-koordinaattia jatkuvasti jollakin luvulla), mutta suoraviivainen eteneminen ei aina näytä luonnolliselta. Kun esimerkiksi palloa heitetään suoraan ylös, se nousee ensin nopeammin, ja nouseminen hidastuu pallon lähestyessä ratansa lakipistettä. Lakipisteestä se alkaa liikkua alaspäin kiihtyvällä vauhdilla.

Seuraava skripti lennättää palloa luonnollisen näköisessä kaaressa. Vaihtelun vuoksi pallon lähtökorkeus, -nopeus ja -suunta ovat satunnaislukuja. Skriptissä käytetään kahta muuttujaa: dx on nopeus x- eli vaakasuunnassa, ja se pysyy koko heiton aikana samana. Muuttuja dy on nopeus y- eli pystysuunnassa, ja siitä vähennetään koko ajan vakiomäärää. Tämä saa lentoradan näyttämään luonnolliselta: nopeus ylöspäin on aluksi suurempi ja hidastuu, kunnes se muuttuu negatiiviseksi, jolloin pallo alkaa kulkea alaspäin.


Ohessa ohjaajan skripti, jossa pallon tilalla on hedelmä: Lentävä meloni. Ylläolevan skriptin lisäksi tämä skripti piirtää kynätoiminnolla koko lentoradan. Jos nopeuden vaikutus on epäselvä, yksi tapa tutkia sitä on lisätä "toista kunnes" -silmukan sisään palikka "odota 1 sekunti", jolloin melonin lento on nykivämpää ja taukojen aikana ehtii katsella muuttujien dx ja dy arvoja.