Pelien tekemiseen löytyy lukuisia työkaluja. Tässä testiin pääsee Impactjs, jolla voi tehdä html5 -standardin mukaisia 2D pelejä. Näkökulmana on taas tietenkin opetus, peliohjelmoinnin opetus.
Mikä ihmeen Impactjs?
Impactjs on oikeastaan kaksi asiaa: Kenttäeditori Weltmeister sekä JavaScript -ohjelmistokehys bittikarttapohjaisen pelin tekemiseen. Paketti maksaa 99 dollaria, ja sen löytää osoitteesta http://impactjs.com/. Järjestelmän kehittäjä on Dominic Szablewski, ja häneen saa hyvin yhteyden sähköpostilla ja IRC:llä. Sain neuvoteltua koulullemme ilmaisen lisenssi kokeilukäyttöä varten, ja kun varmistui että käytämme tätä opetuksessa, ostin yhden lisenssin tukeakseni alustaa. Mikäli opiskelijat haluavat jatkaa Impactilla työskentelyä kurssin jälkeen, joutuvat he ostamaan oman lisenssinsä.
Impactjs vaatii enemmän tai vähemmän JavaScriptin osaamista. "Ohjelmistokehys" tarkoittaa sitä, että Impactiin on koodattu valmiiksi pelintekemistä helpottavia funktioita ja metodeja, mutta ilman ohjelmointitaitoa ei pitkälle pötkitä. Valmiit funktiot hoitavat törmäystenhallinnan, entiteettien piirtämisen, fysiikan mallinnuksen (kuten painovoiman) yms. Esimerkkinä mainittakoon, että painovoima on vain yksi muuttuja, jota voi luonnollisesti muuttaa pelissä tarpeen mukaan vaikkapa käänteiseksi. Tämän lisäksi yksittäisille entiteeteille voi määrittää gravityFactorin, eli sen miten paljon painovoima näihin vaikuttaa.
Perusidea
Impactissa peli koostuu kartasta (joka tehdään Weltmeisterillä) ja Entiteeteistä. Entiteettejä ovat kaikki pelin toiminnalliset ja liikkuvat elementit, kuten pelihahmo, vastustajat, hissit, luodit tai vaikkapa puhekuplat. Pelien koodaaminen on oikeastaan entiteettien tekemistä. Näissä kannattaa hyödyntää periytymistä järkevästi, jotta koodi pysyisi hallinnassa ja fiksuna.
Impactjs on selvästi tasohyppelypeleihin suunnattu kehys, vaikka se taipuu toki muuhunkin 2D-tekemiseen.
Weltmeister - Kenttäeditori
Weltmeister erottaa Impactin (hinnan lisäksi - muut ovat yleensä ilmaisia) lukuisista ilmaisista HTML-frameworkeistä, kuten vaikkapa LimeJS:stä ja Craftysta. Weltmeisterillä voi luoda nopeasti kenttiä peliinsä, kunhan on piirtänyt ensin grafiikka"tilet". Weltmeisterillä voi myös sijoittaa kenttään entiteettejä, kuten vaikkapa hirviöitä, kunhan ne on ensin koodannut henkiin. Weltmeister vaatii toimiakseen PHP:n ja web-palvelimen, ja web-palvelinta tarvitset tietenkin myös itse pelin koodaamisessa ja testaamisessa.
Ohjeita
Impactin documentointi on sivustolla tehty mainiosti, ja Impactiin on jo tehty kaksi ohjekirjastakin. Itse tein tutoriaalin Jesse Freemanin erinomaisen kirjan pohjalta, ja toinenkin kirja on jo tilattu. Alla kuva Freemanin ohjeistuksen pohjalta tehdystä pelistä. Itse peliä voit testata tästä. Jostain syystä juuri tuo tuotos ei toimi Firefoxilla eikä Safarilla, mutta muut selaimet (kuten Opera, Chrome ja IE) toimivat, kunhan ovat melko uusia versioita.
Pelin julkaiseminen
Impactilla voi pelinsä julkaista sellaisenaan HTML5-muotoisena. Mitä tämä sitten tarkoittaa? Yksinkertaistettuna sitä, että peli on web-sivu, jonka voit laittaa web-palvelimelle, ja sitä voi pelata jos omistaa uudehkon selaimen. Eli käytännössä pelin levittäminen ympäri maailman on todella yksinkertaista. Pienellä kikkailulla pelistään saa julkaistua versiot kaikille merkittäville alustoille, vaikkapa cocoonjs -sivuston ystävällisellä avustuksella. Tällöin tuotokselleen voi miettiä myös jotain ansaintalogiikkaa, kuten mainokset tai ostettavat lisäominaisuudet.
Kannattaako hankkia Impactjs
Itse en pidä itseäni kovin kummoisena koodarina, mutta koska perusasiat ovat hallussa, oli Impactjs:llä helppoa väsätä pelejä. Oppilaani ovat myös ohjelmoinnissa keskimäärin melko noviiseja, mutta hyvin nopeasti he saivat pelin toimimaan ohjeiden mukaan. Koska pelien tekeminen on ehdottomasti paras ja innostavin tapa ohjelmoinnin opetteluun, Suosittelen ehdottomasti Impactia peliohjelmoinnin perusopetukseen. Impactista voi myös kätevästi jatkaa opettelua astetta ammattimaisempaan Unity3D-ohjelmaan, koska Unityssäkin voi hyödyntää JavaScriptiä pelin ohjelmointiin.