Kierroksen 5 purku

Toiseksi viimeisen tapaamisemme alussa käsittelimme kuvan varsinaisesti piirtämiseen liittyviä aiheita. Olimme jälleen kahden viikon ajan keränneet informaatiota erinäisistä asioista, ja tässä ovat lopputulokset tiivistettyinä:

Animaatio:

Animaatiot ovat käytännössä peräkkäin näytetty sarja kuvia, joita tarpeeksi nopeasti vaihtamalla saadaan ihmiselle luotua illuusio liikkeestä. Usein sanotaan, että kuvia on tietty määrä sekunnissa (frames per second), ja sen avulla voidaan hieman vertailla animaatioiden sulavuutta. Toteutustapoja on Scalassa useita, mutta yksinkertaisinta lienee päivittää näytölle piirrettävien Image-olioiden kuvaa tarvittaessa. Siinä on kuitenkin lukuisia puutteita – uudelleenpiirrettäessä ei voida suorittaa muuta ohjelmakoodia, animaation ajoitus oikeaan aikaan on vaivalloisempaa ja etenkin pelien toteuttaminen näin on ongelmallista.

Monella tapaa parempi ratkaisu olisi hyödyntää säikeitä. Luomalla Thread -olio ja jättämällä animaatioiden ylläpitäminen täysin sen huoleksi, saadaan ajoitus paljon helpommin toteutettua, samanaikaisesti suoritettua muiden objektien ohjelmakoodia sekä renderöidä kuvaa efekteillä haluttaessa. Kuitenkin sykronointi pääohjelman koodin suorittamisen vaiheiden kanssa voi olla erittäin olennaista tällä tavoin.

Canvasia käyttävä Graphics2D on hidas, kun piirrettäviä kuvaolioita on paljon. OpenGL on nopeampi monissa tilanteissa, ja muut menetelmät voivat olla tilanteesta riippuen vielä nopeampiakin. Tämä tuskin tulee kuitenkaan ongelmaksi, ellei luoda ohjelmia esimerkiksi puhelimille tms.

2D-grafiikka Scalassa

Scalassa ei ole natiiveja grafiisia ominaisuuksia, vaan kaikki piirtämistoiminnot tulevat suoraan Javan kirjastoista. Abstract Window Toolkit eli AWT ja Swing ovat Javan kaksi 2D-grafiikan kannalta erittäin olennaista pakettia. Niissä on paljon samanlaisia piirto-ominaisuuksia ja ne osittain käyttävät samoja luokkiakin, mutta erittäin olennainen ero tulee käyttöliittymän suunnittelun kanssa.

AWT ottaa käyttöliittymän ikkunaelementtien tyylit suoraan käyttöjärjestelmän omista tyyleistä, kun taas Swing piirtää ikkunaelementit omista tyyleistään. Muun muassa ongelmia aiheuttaa AWTia käyttävien ohjelmien porttaus, sillä eri käyttöjärjestelmissä ikkunaelementit voivat näyttää hyvinkin erilaisilta. Swingillä tehdyt ohjelmat sen sijaan näyttävät huomattavasti yhtenäisemmiltä eri käyttöjärjestelmien välillä. Tästä on etua, sillä ikkunaelementtien tyyli sisältää informaatiota mm. siitä, minkä kokoisia ja näköisiä erilaiset napit ja valikot ovat. Jos ero on kovin suuri, voi tarkkaan suunniteltu käyttöliittymä näyttää huonolta tai jopa aiheuttaa hankaluuksia muilla tietokoneilla käytettäessä.

Swing

Swing on Scalan peruskirjasto, jonka avulla on helppo rakentaa monenlaisia käyttöliittymiä. Sen luokat sisältävät määrittelyjä ja metodeja mm. nappuloiden, tekstikenttien, valikoiden ja valintalaatikoiden luomiseen ja käyttöön. Nämä käyttöliittymäelementit sitten jaetaan paneeleihin, joilla voidaan tarkemmin valikoida niiden sijaintia ruudulla.

Ne osaavat myös kuunnella erilaisia inputin tapahtumia, kuten hiirellä klikkausta tai näppäimistön käyttöä, ja heittävät tiedon käyttäjän tekemistä asioista tapahtumakuuntelijalle. Kuuntelija sitten suorittaa erilaisia metodeja riippuen siitä, mitä tapahtui ja missä. Tällä tavoin saadaan esimerkiksi toimintoja käyttöliittymässä olevaa nappia painettaessa.

OpenGL ja renderöinti

Open Graphics Library, eli OpenGL on ohjelmistorajapinta, joka sisältää lukuisan määrän funktioita 2D- ja 3D-grafiikan luomiselle. Se on käyttäjästä ja käyttöjärjestelmästä riippumaton, sillä OpenGL-funktiot pelkästään käsittelevät kuvien tehokasta renderöintiä. Puhtaasti grafiikkaa käsittelevänä kirjastona OpenGL:n avulla ei siis pysty hoitamaan esimerkiksi standardien mukaisten ikkunakomponenttien tekoa, elementtien kuuntelemista tai muita vastaavia toimintoja. Vaihtoehtoisia rajapintoja on myös; pienempiä kuvien renderöintiin pureutuvia kirjastoja on lukuisia, ja eräs olennainen kilpailija on Microsoftin DirectX.

Renderöinti on kuvadatan luomista aiemman datan avulla, noudattaen tietynlaista mallia. 3D-grafiikan yhteydessä termillä viitataan mm. realististen valoefektien kirkkauksien laskemiseen. Videoiden renderöinnissä voidaan kuvasarjan jokaiseen kuvaan lisätä jonkinlainen efekti erilaisten filttereiden avulla, jotta saadaan esimerkiksi kuvasta terävämpää tai poistettua epähaluttuja asioita siististi. Esimerkiksi pelien yhteydessä reaaliaikaisesti useita kuvia peräjälkeen renderöidessä joudutaan säästelemään efektien hienoudesta, sillä aikaa yksittäisen kuvan luomiseen saattaa olla vain sekunnin murto-osa.

– Esa Koskinen

Advertisements

Tapaus 6 – Käyttöliittymäsuunnittelu, purku

Viimeisen OLO-session angendana oli kuudennen eli kurssin päättävän kierroksen (GUI) purku ja lopuksi ryhmän jäsenten yhteisen palautelomakkeen täyttäminen. Kun kaikki ryhmän jäsenet olivat saapuneet paikalle kävimme heti purkamaan viimeisen tapauksen sisältöä. Edellisellä kerrallahan tutkittavaksi aiheiksi oli valikoitunut käytettävyystestit, hidden test ja käyttöjärjestelmille laaditut interaktion suositukset, joista edelleen tarkasteltiin Windows Phonen ja Androidin ominaisuuksia. Seuraavassa lyhyesti, mitä saimme aiheesta irti.

Videopelien oudot ominaisuudet

– Tyyppi 1 – Debug-toiminnot:

Joihinkin peleihin on kehitysprojektin jäljiltä jäänyt erilaisia debug-toimintoja. Esimerkiksi Windows XP:n Space Cadet -pinball pelissä pelin aikana kirjoitettu “hidden test” avaa useita eri debug-ominaisuuksia. Palloa on mun muassa mahdollista liikuttaa hiirellä ja pistesaldo on mahdollista muuttaa arvoon 1,000,000,000. Lisäksi on esimerkiksi mahdollista katsoa pelin viemän muistin määrä ja kehysnopeus. Tarkemmin Pinballin “hakkeroinnista” on kerrottu tämän linkin takana.

– Tyyppi 2 – Pelin tekijöillä oli tylsää tai he halusivat välittää jonkin viestin:

Avoimesta pelimaailmastaana tunnettu Grand Theft Auto -pelisarja on tästä mainio esimerkki. Esimerkiksi GTA IV – pelissä New Yorkin edustalla sijaitsevalla, Liberty Islandin saarella Vapaudenpatsas on kaikkea muuta kuin pelkkä viaton patsas. Vapaudenpatsaan ovikyltissä nimittäin lukee…

“No Hidden Content this way”

…ja mitä patsaan sisältä paljastuukaan…

“Heart of the City”

Eivätkä patsaan kasvotkaan taida ihan vastata esikuvaansa…

Jos kiinnostuksesi heräsi, aiheesta löytyy enemmän tietoa tämän linkin takaa.

– Tyyppi 3 – Pelin tekijät olivat laiskoja tai budjetti loppui kesken:

Seuraava video kertoo luultavasti kaiken tarvittavan siitä, mitä seurauksia tällä voi olla.


Sittemmin huippusuosion saavuttanut Creepy Watson on myöhemmissä saman studion Sheerlock Holmes -peleissä jätetty tarkoituskella enalleen.

Käytettävyystestit

Käytettävyystestaus on prosessi, jossa käyttäjien avulla arvioidaan tietyn tuotteen käytettävyysongelmia, esimerkkinä käyttöliittymien testaus. Tuotteen kohderyhmästä valitaan käyttäjiä, jotaka testaavat tuotetta valvotuissa olosuhteissa. Pelkkä mielipiteiden keräämien ei ole käytettävyystestausta, vaan olennaista on nimenomaan myös testin systemaattinen tarkkailu. Käyttäjien toiminnasta voidaan päätellä, mitkä asiat esimerkiksi juurikin käyttöliittymän käytössä aiheuttavat ongelmia ja mitkä taas luonnistuivat helposti.

Vuorovaikutus käyttäjien kanssa antaa suoraa palautetta siitä, mtien tuotetta kannattaa kehittää eteenpäin. Tarkoituksena ei välttämättä ole löytää joka ikistä ongelmaa tai todistaa nitä tieteellisesti.

Testiin osallistuu usein muutamia käyttäjiä, koska parilla ei saada tarkkoja tuloksia ja todella suuret ryhmät vaatiavat paljon resursseja. Testillä on tarkkailijoita tyypillisesti yhdestä kolmeen, ja he voivat olla joko taustahavannoitsijoita tai näkymättömissä.

Käyttöjärjestelmien interaktion suositukset

Tarkastelun kohteina oleiden moobilialustoiden Windows Phonen ja Androidin sovelluskehittäjille annettuissa ohjeissa on monia yhtäläläisyyksiä, mutta vähintään yhtä paljon löytyy myös poikkeavaisuuksia.

Alustoiden varmasti tärkein omien sovellusten yhtäläisyys on appien ulkoasu. Valmistajat haluavat säilyttää niissä samat piirteet, jotta sovellusten käyttäminen olisi kautta linjan helppoa ja intuitiivista. Windowsilla ulkoasun määrittely on ehkä kuitenkin Androidia vähän tiukempaa. Android-alustalla sovelluksilla ei nimittäin aiemmin ollut ulkoasun määräviä kriteereitä, mutta sittemmin Google on halunnut järjestelmänsä ulkoasuun yhdenmukaista logiikkaa.  Molemmille käyttöjärjestelmile yhteistä on myös omien sovelluksien johdonmukainen käytettävyys. Tämä tarkoittaa sitä, että jos esimerkiksi sovelluksessa olevalla painikkeella on tietty toiminto, täytyy vastaavan ulkoasun omaavan painikkeen suorittaa toisessa ohjelmassa samankaltaiset toimenpiteet.

Mobiilialustoiden eroavaisuuksia mainitakseni Windows Phonen sovelluksissa painotetaan liikettä ja elävyyttä, kun taas Androidin puolella asiat pitäisi ilmaista mielummin kuvien avulla kuin tekstillä, kertoohan kuva tunnetusti enemmän kuin tuhat sanaa. Androidilla myös tiedon nopea käytettävyys on avainasemassa, mikä tarkoittaa sitä, että käyttäjän syöttämää tietoa pitäisi tallentaa laitteen musitiin, jotta sama tieto on myöhemmin nopeasti saatavilla. Tällä pyritään siihen, että samaa asiaa ei tarvitsisi kertoa laitteelle joka kerta uudelleen. Windowsin kehittäjille annetaan puolestaan ohjeeksi sovelluksen ongelmaton eri ympäristöissä; onhan Windows alun alkaen ollut PC-tietokoneiden käyttöjärjestelmä eikä mobiilikäyttöjärjestelmä.

Tämän linkin takaa löytyy vielä pääpiirteet Androidin appien kehittämiseen annetuista ohjeista, joiden avulla sovellusten kehittäjät voivat laatia käyttäjäystävällisiä ohjelmia.


Markus Pajari