maanantai 23. huhtikuuta 2012

Juuri ajoissa

Meinasin tämän päivän blogipostaus mitlein unohtua, päivällä sitä kun en kerinnyt kirjoittamaan. Muistin kumminkin viimetingassa joten kirjoitetaan tämä vielä tämän päivän puolella.

Viime viikolla palailtiin taas pelimekaniikan ohjelmointiin pari viikkoa kestäneen kamerasäädön jälkeen. Lisäsin peliin kaksi uutta yksikkötyyppiä, jotka olivat jalkaväki ja lentävät yksiköt. Lentävät yksiköt termi kuulostaa omaan korvaan hieman hassulta, muttei niitä lentokoneiksikaan voi sanoa sillä lentäviin yksiköihin kuuluu niin lentokoneita kun helikoptereitakin. Lisätylle kuljetushelikopterille oli valmis spritekin joka tosin vaatii vielä hieman säätämistä. Peliin lisäsin myös perus kiväärimiehen jolle ei ole vielä omaa spriteä laisinkaan joten jouduin sille iskemään placeholderin. Näille yksiköille lisättiin myös omat liikkumisrutiininsa jotka lähinnä olivat vain muutoksia pathfindingiin. Lentävät yksiköt liikkuvat kaikissa eri maastoissa ilman muutoksia, jalkaväki taas voi kyllä kiivetä vuorelle mutta se kuluttaa kaiken liikkumisen.

Uusia yksikköjä lisäillessäni rupesin samalla miettimään yksikköjen lataukseen käytettyä koodin pätkää. Se kyllä toimi mutta oli hieman sekava.  Optimoin koodia hieman ja samalla tein sen sellaiseksi että se osaa ladata usean yksikön kerralla. Tämä tulee varmasti tarpeen peliin tulevan tallennusmekanismin myötä.

Minulla on ollut mietinnässä pari viikkoa jo mahdollisen nettimoninpelin lisääminen peliin. Tämä tapahtuisi palvelimen kautta mahdollisesti XML tiedostoa eestaas siirtelemällä. Ensimmäinen pelaaja tekee siirtonsa, pelin tilanne tallenetaan XML tiedostoon, peli siirtää XML tiedoston palvelimelle josta toinen pelaaja ottaa sen, lataa tilanteen XML tiedostosta, tekee omat siirotonsa ja lähettää sen takaisin palvelimelle. Tämä auttaisi testausta, sillä testipelaajat voisivat pelata toisiaan vastaan, tekoäly kun tulee olemaan huomattavasti myöhäisempi juttu. Selvittilen tässä pikkuhiljaa miten tälläinen olisi mahdollista ja lisään sen peliin jos se osoittautuu helposti tehtäväksi.

Tällä viikolla ei välttämättä tule kovin paljoa päivityksiä itse peliin kun teemme hieman "urakalla" toista kouluprojektia. Jos kumminkin aikaa pelin koodauskelle löytyy on seuraavaksi vuorossa yksikköjen hyökkäys toisiin yksiköihin.


Viime viikon muutokset:
- Lisätty kiväärimies
- Lisätty Kuljetushelikopteri
- Muutettu unittien lataamista,
- Liikkumisrutiinit lisätyille yksiköille



Tällä viikolla tulevat muutokset:
- Yksikköjen hyökkäys


maanantai 16. huhtikuuta 2012

Koodausta & Kameraa

Tällä viikolla DroidWars edistyi huomattavasti parempaa vauhtia kun edeltävällä viikolla, onneksi. Menneen viikon muutokset olivat lähes kaikki vain kameran toimintaan liittyviä ja sen sainkin suurimmaksi osaksi kuntoon. Ainut asia mitä en  vielä korjannut oli zoomauksen muuttaminen laitteen resoluution mukaan, sillä sen toteuttaminen tulee vaatimaan miettimistä ja se ei ole muutenkaan tärkeyslistalla korkeimmasta päästä.

Ensinnä korjasin pelin GUI:n joka kameran resoluution muuttamisen jälkeen oli missä sattui. Nyt vuoronvaihtoikoni on aina oikeassa alakulmassa resoluutiosta huolimatta ja pelaajan nimen näyttävä teksti no aina keskellä ruutua ylälaidassa. Asetin myös kameralle rajat, jottei pelaaja voi liikuttaa kameraa kentän ulkopuolelle. Tämän kanssa tuli tapeltua hetki, ennenkuin hoksasin esimerkistä että rajojen käyttöönotolle oli vielä erillinen boolean muuttuja joka piti vaihtaa trueksi ennenkuin rajat toimivat.

Lisäsin myös peliin Andenginessä olevan screenshotominaisuuden jonka toimimaan saaminen aiheutti myös vähän ihmettelyä. Aluksi peli ei onnistunut tallentamaan kuvaa puhelimen muistiin. Tämä korjautui antamalla ohjelmalle lupa tallentaa tavaraa puhelimen muistiin (pätkä koodia AndroidManifestiin). Kun kuvan tallentaminen onnistui näkyi siinä vain tausta, muttei yksikköjä. Huomasin kumminkin että screenshotin ottava työkalu osaa ottaa kuvaansa vain asiat jotka on lisätty ennen sitä pelin näytettäväksi. Jouduin tekemään screenshotin ottamista varten pienen viritelmän joka screenshot nappia painettaessa liittää kameran peliin, ottaa kuvan ja irroittaa sen kuvan oton jälkeen. Tällä tavalla kamera saa aina kaiken mahdollisen mukaan kuvaan (GUI:ta lukuunottamatta, jota screenshotissa ei näy).

Pelin uusi ikoni jäi laittamatta, sillä kyseisestä ikonista on vain pelin käyttöön tarkoitettu 32x32 kuva ja androidin ikonit ovat tyypillisesti 128x128. Tämä lisätään kuhan graafikko saa sen tehtyä.

Pidin pelistäni myös koulun vaatiman Aiheseminaarin jossa esittelin opinnäytetyöni aiheen (Tekoäly & DroidWars). Idea otettiin positiivisesti vastaan ja sitä pidettiin hyvin mielenkiintoisena.

Viime viikko meni kameran kanssa säätäessä mutta tällä viikolla siirrytään takaisin gameplayn ohjelmointiin ja tarkoituksena olisikin lisätä uusia yksikkötyyppejä. Lisään peliin niin jalkaväkeä kuin ilmayksiköitäkin ja teen niille kuuluvat pathfinding rutiinit. Jos uusien tyyppien lisääminen sujuu helposti saatan alkaa myös työstämään yksikköjen hyökkäämistä joka tulee olemaan astetta suurempitöinen projekti.

Viime viikon muutokset:
- GUI Korjattu
- Kameran liikkeen rajaus
- Screenshot-työkalu lisätty
- Pari pientä bugia korjattu


Tällä viikolla tulevat muutokset:
- Uusia yksikkötyyppejä
- Uuden ikonin lisäys
- Mahdollisesti yksikköjen hyökkääminen

maanantai 9. huhtikuuta 2012

AFK

Peliprojekti edistyi viimeviikolla todella vähän, sillä samalle viikolle sattui niin pääsiäisen sukuloinnit kuin Lost In Joensuu 2012 (jossa TIKO:laisista koostuvan joukkueemme nimi oli tietenkin AFK). Sain kumminkin aikaiseksi kameran säätämisen laitteen resoluution mukaan sekä lisäsin päivitetyn tankin spriten sekä uudet maastojen grafiikat. Kameran resoluution säätäminen aiheutti GUI:n menemisen poskelleen, sillä en ollut tajunnut laittaa niiden paikkojen laskentaa riippumaan kameran resoluutiosta vaan olin hardkoodannut ne peliin. Myös kameran zoomaus hajosi resoluution muutoksen jälkeen, sillä senkin muuttujat oli hardkoodattu. Hardkoodauksien poisto on ykkösprioriteetilla tälläviikolla. Tarkoituksena olisi myös rajoittaa kameran liikettä (ettei pelaaja voi siirtää kameraa kokonaan pois pelialueelta) sekä pelin ikonin muuttaminen.


Viime viikon muutokset:
- Kameran resoluutio otetaan laitteen resoluutiosta
- Kameralle pistettiin maksimi/minimi zoomi

- Uusi tankin sprite peliin
- Uudet maastot peliin


Tällä viikolla tulevat muutokset:
- Rajoitus kameran liikkeelle
- Kameran zoomauksen korjaus
- GUI:n korjaus
- Uusi pelin ikoni

maanantai 2. huhtikuuta 2012

Uusi kuu, ei niin uudet kujeet

Aamulla herättyäni ja koneelle kömmittyäni huomasin että drobox synkronoi pari uutta tiedostoa ja minä tietenkin katsomaan että mitä uutta on tullut. Siellähän oli uudet maastot. Graafikko soitti sitten vähän ajan päästä ja sanoi tehneensä ne viimeyönä. Kyseisellä ihmisellä olisi kumminkin tehtävänä lopputyökin tiistaiksi. Grafiikan tekeminen oli kumminkin kuulemma hyvä paussi kirjoittamisesta joten en valita. Viikonloppuna tuli myös uusi ikoni tankille, joten projekti edistyy graafisesti hyvin mukavaa vauhtia. Tulevan kuukauden aikana saadaan mahdollisesti ensimmäiset kuvankaappauksetkin tehtyä, kuhan maastoa ensin hiotaan vähän.

Koodin puolelta tämä viikko oli aika säätämistä, huomasin nimittäin ettei minulla ole käytössä uusin versio käyttämästäni pelienginestä. Tämän huomasin oikeastaan vahingossa, sillä tarvitsin pinchzoomia ja kameran liikutusta varten multitouchia ja luulin ettei sitä vain nykyisessä versiossa ole. Huomasin kumminkin pienen kaivelun jälkeen että multitouch on erillinen plugin joka on saatavilla vain mercurial repositorystä. Hain sitten samalla sekä uusimman version enginestä sekä kyseisen pluginin. Uusi version ja engine saatiin toimimaan lisäämällä ne Eclipseen "library projekteiksi" joita ei voi laitteelle siirtää, mutta ne otetaan mukaan projekteissa jotka niitä käyttävät. Koodiin piti tehdä pieniä muutoksia enginen päivittämisen takia, mutta muutosten suuruus rajautui oikeastaan vain muutamien muuttujien tyyppien muuttamiseen.

Päivityksen jälkeen pinchzoomin ja kameran liikuttelun lisääminen oli helppoa asiaa käsittelevän esimerkkikoodin pohjalta. Ominaisuutta lisäilessäni huomasin helpomman tavan unittien valinnalle taulkoiden selaamisen sijaan. Rekisteröin vain unittien spritet kosketusaluiksi ja käytän sitä unittien valitaan. Tehtaiden kohdille piti luoda erikseen näkymätön neliö joka toimii kosketusalueena, sillä tehtaalla ei enginessä ole suoraan omaa spriteä koska se on osa karttaa. En ole täysin varma onko tämä tapa kyvempi kun taulukoiden kanssa plärääminen, mutta se pitää testata myöhemmässä vaiheessa.


Viime viikon muutokset
- Pinchzoom lisätty
- Kameran liikutus lisätty
- Valintasysteemi muutettu

Tällä viikolla tulevat muutokset:
- Uusi tankin sprite peliin
- Uudet maastot peliin
- Rajoitukset kameran liikkumiselle ja zoomaukselle
- Kameran keskittäminen pelin alussa ja vuoron vaihdossa