mandag 30. november 2009

Case X : The End

Ja, da var vi her alt. 10 case har gått fort! Men jeg har lært mye, det kan jeg ikke nekte for!
Oppgaven denne gangen var å gjøre siste finpussen, lage meny med knapper, mulighet til å starte spillet på nytt osv.
Jeg lagde en meny med instruksjoner til hvordan man spiller, som viser kontroller og poenget med spillet. Så fikk jeg inn et par knapper, en start-knapp og en "se intro"-knapp. Deretter lagde jeg en intro-film, som kommer helt først når man åpner spillet. Når den er ferdig-spilt (eller du har trykket skip intro), kommer du til menyen. Etter spillet kommer en gameover-skjerm, som viser hvor mye poeng du fikk, og med mulighet til å gå til menyen eller restarte. Det meste her var egentlig ganske lett å få til, det vanskeligste var nok nullstilling og fjerning av objekter fra scenen, men med litt pusling og toldmodighet så går det bra til slutt!
Spillet er ferdig!

Case 9: Lydsetting

Ja, nå er jeg nærme slutten her! På tide å få litt lyd i spillet nå! Spillet skal ha bakgrunnsmusikk og lyder trigget av forskjellige eventer i spillet. Jeg var smart og lånte med meg en H4 Zoom lydopptaker for noen uker siden og spilte inn de lydene jeg trengte da, så derfor hadde jeg alle lydene ligende på dataen når vi begynte med dette caset.
Etter å ha sett et eksempel på hvordan man gjør det kodemessig med lyd, ble jeg overraska, det var jo slettes ikke vanskelig! Man må bare huske på å legge musikken i SoundChannel, så man får ordentlig kontroll over lydklippa. Lydsettinga var faktisk veldig enkelt. Jeg har lagt inn lyder til litt forskjellige situasjoner i spillet, som f.eks. når Gustaf plukker opp godteri, treffer fiender, kommer i mål og sånt no.
Det som derimot var litt krevende, var å finne bakgrunnsmusikk. For det første, ikke alt passer i et flash-spill, og jeg hadde en liten idè om hva slags musikk jeg ville ha. Men så var det det å finne den musikken da. Problemet er at mesteparten av musikken du finner på nettet er copyrighta. HELDIGVIS var jeg heldig og fant en side med musikk beregna på å bruke i f.eks. filmer, og der fant jeg den perfekte låta til spillet mitt. Og det beste: ingen copyright!
Nå er spillet klar for siste finpus!

fredag 20. november 2009

Case 8: Objekter å plukke opp og timer

I denne casen skulle vi lage objekter som figuren skulle kunne plukke opp for å få poeng, og en timer som holder styr på tiden på et vis.

Objekter som skal plukkes opp i mitt spill, er godteri som Gustaf finner i Karamellskogen. Disse ble lagt i en Array, som fungerer som et magasin med mange objekter i. Det som er smart med array er at man kan styre mange like objekter ved èn kode, i stedet for å gi hvert eneste objekt sin egen kode. Det tok litt tid å forstå det her helt, men tror jeg har litt oversikt nå. Etter å ha fått frem godteriobjektene på skjermen, gjaldt det å flytte arrayen etterhvert som figuren flytta seg rundt, den måtte derfor integreres i move-funksjonen til figuren, noe som gikk ganske lett.
Jeg ville også gi godteriet sin egen gravity og kjøre hit-test mot baken på det, ettersom jeg ville at det skulle falle litt tilfeldig her og der, ved hjelp av en random-funksjon, men det førte til at spillet begynte å lagge/henge igjen veldig, noe jeg har begynt å slite mer og mer med i det siste. Jeg vil derfor gi hvert objekt i arrayen et fast-bestemt punkt i stedet, ettersom det krever mye mindre av pcen.
Jeg forstår ikke riktig hvorfor spillet hakker så mye som det gjør, det er sykt irriterende og hindrer meg litt i å gå videre med spillet, ettersom det er et problem jeg gjerne vil ha løst.
Etter at jeg fikk plassert inn godteriet, la jeg inn en hit-test som sjekker om figuren treffer godteriet, og hvis det skjer, så fjernes objektet og det legges til 1 i variabelen Poeng.
Jeg lagde også en HUD, som viser hvor mange liv som gjenstår, antall poeng og til slutt en timer som teller ned. Tanken er at hvis denne når 0 så er spillet tapt.
Timeren krevde en del triksing og miksing å få til, klasser måtte importeres og brukes på nye måter, så det tok litt tid å sette seg inn i det. Men jeg fikk det til med litt hjelp fra forskningsassistenter og medelever. Herlig!
En ting jeg tenkte med objektene som gir poeng, er at man får en poengbonus til slutt hvis alle objektene er plukket opp. Og jo mer tid man har igjen, jo mer poeng får man. Tror jeg skal få til dette med en enkel variabel. Jeg får se hva det blir til.

Case 7: Fienden skal integreres i spillet

package
{
I case 7 skulle vi integrere enda en karakter i spillet, som skulle leve sitt eget liv og ikke styres av spilleren. Denne karakteren skulle automatisk følge etter hovedkarakteren og eventuell kontakt mellom de to skulle føre til en reaksjon, for eksempel spille av en annen animasjon, vise beskjed på skjermen, fjerne den nye karakteren eller lignende.
Jeg har valgt en tannbørste som fiende i mitt spill, ettersom jeg syns den er en passende fiende for en godtegris og sukkerslave som hovedkarakteren min er. Tannbørsten hadde jeg allerede tegnet, men animeringen gjensto. Etter å ha gjort ferdig den, gjaldt det å få karakteren inn i spillet, noe som var ganske enkelt, det ble gjort akkurat på samme måte som med hovedkarakteren.
Deretter lagde jeg en hit-test, som sjekka om tannbørsten traff bakken, og la til gravity, som gjorde at fienden fulgte bakken på lik måte som hovedfiguren gjør.
Så kom jeg til det jeg syns var den vanskelige delen: å få fienden til å bevege seg riktig i forhold til hovedkarakteren. Ettersom jeg har en GANSKE langt funksjon som ordner med farta på figuren og den bevegelser, tok det en del tid å få alt til å klaffe på riktig måte. Her gjaldt det å holde tunga rett i munnen og tenke riktig. At fienden f.eks. skulle ha minus i fart når jeg løp ifra den, og hvor fort den skulle løpe om jeg løper mot den, står stille og lignende, krevde litt å få til riktig, men til slutt fikk jeg et resultat jeg ble ganske fornøyd med.
Så lagde jeg en Boolean-variabel som jeg koblet opp mot hvilken side av hovedkarakteren fienden befant seg på. Var fiendens x-verdi mer enn hovedkarakterens, altså til høyre for den, var variabelen fiendehøyre=true, og scaleX=1. Var x-verdien mindre, var fiendehøyre=false og scaleX=-1. Dermed snur fienden seg etter hvilken side den befinner seg på.
Til slutt lagde jeg en hit-test som sjekker om figuren treffer fienden. Hvis den gjør det, springer fienden tilbake den veien den kom fra, og en dø-animasjon avspilles for hovedfiguren. Etter dette, får hovedfiguren et nytt liv (man har i alt tre) og tannbørsten begynner å følge etter igjen.

} //end package