Johan alkaa tapahtua!

Tässä vaiheessa opiskelua tulisi varmaan olla zeniläisen maltillinen ja pohdiskella muutama kuukausi luokkien, olioiden, instanssien, pointtereiden ja sensellaisten syvintä olemusta, ja käynnistää koneet vasta kun kaikki nämä käsitteet ovat omia taskuja tutummat. Eivät ole. Enkä pohdiskele. Haluan jotain näkymään ruutuun NYT!

Siispä vaihteeksi kahlaamaan iOS Dev Centeriä. Siellä on kasapäin hyviä oppaita, mutta samaa aihetta sivuavia tekstejä voi olla useampia ja jotkut niistä muistuttavat otsikkotasolla hämäävässä määrin toisiaan, joten kirjaan joitakin ylös tänne myös itselleni muistiinpanoiksi. Tämän aloitusoppaan iPhone-grafiikkaan koin itse hyödyllisimmäksi. Sen mukaan vaihtoehdot näyttivät lyhyesti sanoen olevan OpenGL ES tai Applen omat grafiikkaenginet Quartz (aka. Core Graphics), Core Animation, ja UIKit. OpenGL toi mieleen ”oikeat” 3d-pelit, joten hylkäsin sen toistaiseksi liian vaativana, vaikka oppaan mukaan sillä pystyy generoimaan myös 2d-grafiikkaa. Jos aikomuksena olisi tehdä vaativia rendauksia korkealla frameratella, tämä varmaan olisi ainoa oikea tapa, mutta kuten muistamme, tavoitehan on ihan jotain muuta – siis kääriä tukuittain rahaa köykäisillä pikkupeleillä.

UIKitin piirto-ominaisuudet taas näyttivät omiin tarpeisiini nähden äkkiseltään vähän turhankin korkean tason ohjelmoinnilta. Jos oikein ymmärsin, niin jokaikistä visuelementtiä (ympyrä, viiva, bittikarttakuva tms.) varten täytyy luoda ja hallita oma instanssinsa. Sain sellaisen mielikuvan, että tämä piirtotapa on laadittu yksinomaan toimimaan hyvin synkassa Cocoan valmiiden navigointiobjektien kanssa. Eli jos teet pääasiassa iOS:n omiin navigointielementteihin perustuvia softia, ja haluat vain hieman kustomoida jotain visua sieltä täältä, tämä tapa sopinee sinulle. Harkitsin tätä, koska näissä luokissa näytti olevan sisäänrakennettu törmäystunnistus, josta voisi olla hyötyä peleissä, mutta saavutettava framerate ei mahtaisi riittää edes pikkupelien tarpeisiin. Korjatkaa, jos olen väärässä!

Core Animation näytti ainakin tämän MoveMe-tutoriaalisoftan perusteella tukevan lähinnä ennalta määrättäviä siirtymiä, joten edes jollain asteella fysiikkaa mallintaviin pelisovelluksiin se lienee hieman kömpelö. Kaikennäköisiin näkymien välillä siirtymiin tämä framework vaikuttaisi olevan kuitenkin enemmän kuin paikoillaan, ja näitä samaisia metodeja iPhonen oma navigointi ymmärtääkseni käyttääkin.

Haluan siis piirtää melko simppeliä 2d-grafiikkaa, mutta hallita näkymää kuitenkin frame framelta. Vaihtoehdokseni näyttäisi siis jäävän Quartz 2d eli Core Graphics framework. Tämän erinomaisen oppaan perusteella Core Graphics vaikuttaisi itse asiassa aika pätevältä ja helppokäyttöiseltä grafiikkaengineltä – muunmuassa pdf-tiedostojen luonti ja Photoshopista tunnetut läpinäkyvyystilat (Multiply, Overlay jne.) näyttäisivät olevan Quartzissa sisäänrakennettuina ja muutamalla komentorivillä käytettävissä. Hyvä tietää vastaisen varalle. Juuri nyt kelpaisi silti vähempikin, vaikkapa nyt ympyrä!

Tein siis tähän tapaan (kun pari harhapolkua oikaistaan):

PS. Tuota esimerkkikoodien tulkintaa helpotti hurjasti, kun sain tietää että tuo usein toistuva omituinen syntaksi [munInstanssi munMetodi] on itse asiassa Objective-C:ssä ihan sama asia kuin itselleni paljon tutumpi munInstanssi.munMetodi -tyyli. En tiedä, josko joku sävyero on, mutta käytännössä näyttäis että noita tapoja voi käyttää miten vaan ristiin. En oikein tiedä, onko tuosta jotain suosituksia, kumpaa tapaa pitäisi käyttää.

PPS. Ai niin, ehkä jo huomasittekin, nuo Core Graphicsin komennothan olivat muuten ihan perinteisiä C-funktioita! Eli Apple koodaa itsekin muovailuvahalla silloin tällöin, vaikka ulospäin ollaan niin legoa, että.

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s

%d bloggers like this: