Saturday 26 March 2011

Animoitu teksti animaatiosta

MEMAPPER on parhaillaan sellaisella tasolla että itse jaksaisin tehdä sillä karttoja MERPGiin. Hionnen sitä vielä muutaman Betan ajan, jotten olisi ainoa joka kehtaa koskea häneen, ja toteutan siihen hit-editorin päälle.

Koska olen laiska käyttöliittymäsuunnittelija, päätin uhrata tämän viikonlopun MERPG-moottorin hionnalle. Viikolla voin sitten hioa mapperia. Toteutin kasassa olleen moottorin käytännössä puhtaalta pöydältä uusiksi. Näyttölaiteabstraktio toimii käytännössä niin, että olio jonka halutaan piirtyvän ruudulle, lisätään add()-funktiolla näyttöabstraktion takana olevaan tietorakenteeseen, ja ruudunpäivitysfunktiossa piirtojono tulostetaan ruudulle.

MEMAP - rakenne oli helppo implementoida tähän piirtosysteemiin. Kun perittiin piirtosysteemin pohjana oleva kuvaluokka (joka sisältää piirrettävän pinnan ja koordinaatit), ja rakennettiin karttatoiminnallisuus sen päälle. Tämä on niitä olio-ohjelmoinnin kivuuksia, koska MEMAP-kartat ovat kuvia, voidaan karttaa käyttää kuin mitä tahansa muutakin kuvaa.

 Kun moottori oli samalla tasolla kuin vanha versio, aloin miettiä animaatiomoottoria. Jossain CB-shooterissa ei ole niin väliksi miltä grafiikka näyttää ja elääkö se, mutta suhtaudun MERPGiin keskivertoperfektionistisella asenteella, joten on ehdottoman tärkeää että grafiikkaa pystyy katselemaan kymmentä sekuntia kauemmin. Sitäpaitsi, MERPG on tribuutti pokemonpeleille, ja jo Pkmn Redissä oli animoitua grafiikkaa.

Mutta miten tämä animaatiomoottori olisi syytä toteuttaa? Aluksi mietitään sitä miten animaatiot toteutaan. No tietysti samoin kuin Coolbasicissa: iskemällä animaatio.bmp:hen framet vieri viereen. Koodin puolella taas meillä voisi olla rakenne, josta ännännen framen saa ulos tarvittaessa, ja joku osoitin joka annetaan piirtosysteemille. Tämä osoitin, ja muutenkin vaihtuvan kuvan automaattinen toteutus piirtosysteemille, on vähän jännä. Piirtosysteemi odottaa saavansa piirtojonoon SDL_Surface - pointterin, joten kääntäjä ei tykänne jos sinne laitetaankin pointteri SDL_Surface - pointteriin.

Toki animaatioluokan voisi toteuttaa niin, että sen muuttuva surfacepointteri on täysin julkinen. Tämä kusee hieman kapsulointiperiaatteita nilkoille, mutta ei voi mitään. Taide vaatii välillä pelättyjäkin näkökulmia :)

Ei kun oikeasti, jos surfacen saisi julkisesta getteristä, voisi animaationpiirto ollakin aika helppo läpihuutojuttu. Vielä oikeammin, jos kaikki piirtokelpoinen toimisi näin, saataisiin piirtorituaaleja optimoitua, kun ei tarvittaisi enää erillisiä rituaaleja animaatioille ja staattisille kuville.

Tutkinpa :P

No comments:

Post a Comment