Speldesign #6

Featured image

Denna gång tänker jag skriva om vad jobbat med nyligen. Jag har arbetat mycket på att få en snyggare HUD (Heads-Up-Display) och även med en mycket svårare del som har krävt mycket tid. AI (artificiell intelligens). Men först, lite HUD.

Som jag nämnde i tidigare blogg så har jag arbetat en hel del med HUD på senaste. I början så var det bara två olika bars som representerade spelarens liv och energi. Men efter att ha haft testare som spelat så sa alla samma sak, att det är otydligt vad som är vad. Och vad det används till. Så jag lade till texter där det står ”Health” och ”Energy”. Men Featured imagegruppen sa att dem tycker det vore roligare med en mer visuell representant än bara en tråkig text. Så en grafiker (Håkan Pettersson) gjorde ett hjärta och ett batteri som jag placerade bredvid dem olika bars’en. Så nu finns det ett fint litet hjärta och batteri som representanter av liv och energi.

Hur jag gör är att jag ritar ut dem med enkel kod och uppdaterar ständigt koordinaterna så dem ligger uppe i hörnet av skärmen bredvid bars’en.

Featured image

Nu lite AI! Jag tror att AI är nog det värsta jag jobbat med när det kommer till kod. Hur gör man? Hur börjar man? Det är många som sa till mig att AI är svårt men när jag satte mig med det själv så fick jag själv se hur svårt det var.

Det enda jag lyckades med, efter att ha suttit flera timmar med kodande, var att fienden ständigt följer efter spelaren. Och eftersom fienden är snabbare än spelaren så blev det en ganska svår fiende.

Hur jag gjorde kanske blir konstigt om jag försöker förklara i ord men det är så jag föredrar att skriva mina bloggar. Jag gjorde att koden räknar ut en vinkel mellan spelaren och fienden. Vinkeln har tre hörn som den utgår ifrån. Längst uppe i hörnet, spelaren och fienden. Efter den så blir det Pythagoras sats (C = sqrt(A^2 + B^2)). Då får den som sagt ut vinkeln och vänder sig hela tiden mot spelaren och rör sig alltid i den riktningen.

Varför tycker jag är ganska uppenbar. Vi kan inte ha en fiende som bara ligger och flyter. Först så sprang den runt i cirklar vilket gjorde att det inte blev någon utmaning för spelaren. Men nu så när den följer efter så skapar den en bättre utmaning för spelaren.

Speldesign #5

Hej, här kommer lite uppdatering om vad jag hållit på med.

Som jag nämnde förra blogg-posten så hade jag gjort en meny. För att använda menyn så tryckte man ner ‘W’ för att gå uppåt och ‘S’ för att gå neråt. Detta var tydligen på tok för oklart om hur man gjorde. Så under speltestning, så när spelarenFeatured image satte sig ner så frågade han eller hon direkt: ”Hur använder man menyn?”.  Så jag lade till en kort förklaring under alternativen om hur man använder menyn. Egentligen tänker jag byta ut ‘W’ och ‘S’ till uppåt-pil och neråt-pil. Varför är för att det skulle kännas mer naturligt för det flesta användarna. Under speltestet så testade alla pilarna och inte ‘W’ och ‘S’. Varför jag inte byter ut redan nu är för att ‘W’ och ‘S’ är programmerade att bara kännas av en gång per tryck. Så även om man håller ner någon av alternativen så kommer den ändå bara hoppa ett snäpp. Koden uppdateras många gånger per sekund så det var viktigt att programmera att den bara känner av en gång eftersom det annars var näst intill omöjligt att välja i menyn, då det bara är tre alternativ. Så säg att den uppdateras 20 gånger i sekunden och man trycker ner någon knapp lite snabbt, så är ändå knappen nere i nästan en sekund. Då har den alltså hoppat 20 gånger. Så därför gjorde jag en kod som gör att den inte kan hoppa mer än 1 gång på tryck, även om man håller nere knappen.

Featured image

Jag har även jobbat en hel del med HUD (Heads-Up-Display). HUD är saker som ger spelaren en uppfattning om vad som händer på skärmen. Som om du har en HP-bar (health-point bar) så ger det spelaren en uppfattning om hur mycket liv den har. Eller om du kanske visar ammunition, så är det en slags HUD. HUD är alltså en visuell representant av vad som händer på skärmen.

Vad jag gjort är att jag la till vad saker och ting var. Typ som i vår Healt-point bar, så står det ”Health 100%”. Så det står vad det är och hur mycket man har. Den visas även visuellt av att när man tappar liv så försvinner en bit av baren, och när desto mindre liv man har, desto mindre ser man. Detta beskriver jag i en av mina tidigare bloggar.

Hur jag gjorde det var att jag ritar ut en text som hela tiden uppdateras med spelarens koordinater. Så den kommer alltid ligga uppe i vänstra hörnet. Spelaren har egentligen 200 i liv. Men jag ville visa spelaren i procent eftersom dom flesta är vana vid det. Så jag tar spelarens liv och delar den med 2. Så kommer den visa spelarens liv i procent. Varför inte spelaren bara börjar på 100 i liv är för att health-point baren ritas ut med livet. Det gjorde att 100 blev en för liten representant av livet. Så varför är bara rent visuellt.

Jag har även gjort att fienden kan dö. Den får en liten health-point bar vid sig och när den når 0 så ”dör” den. Hur den funkar, är att den tar fiendens koordinater och följer efter fienden hela tiden. den börjar på 40, och precis som jag skrev om spelarens healthbar så är det bara för rent visuellt sett som jag sätter dom värdena.

Jag la även in text som hjälper spelaren att förstå hur man spelar. Som man kan se på bilden bredvid spelaren så står det ”Use ‘Mouse1’ to shoot”. Det står så ändå tills spelaren skjuter. Det finns olika tips medans man spelar. Så om man kommer till en dörr så står det hur man öppnar den. Det står även hur man gasar. Texten försvinner när man har använt sig av tipset. Så om man öppnar en dörr, så kommer den inte längre visa hur man öppnar en dörr. Eller som jag skrev, så när man skjuter så kommer den inte längre visa hur man skjuter.

Hur jag gjorde var att jag skrev ut texten och så längre spelaren inte använder sig av dom knapparna så kommer texten ligga där. Rent programmeringsmässigt så är det en variabel som hålls true tills knappen blir nertryckt.

Varför jag gjort som jag gjorde var för under speltestningen så var det ingen som testade vårt spel som förstod hur man spelade. Så hade det inte varit för att jag satt med dom så hade alla som testade bara suttit och tryckt runt på olika knappar. Det kändes som det var nödvändigt att lägga till det jag gjorde för att vem som helst ska kunna spela.

Ett problem jag stötte på var om spelaren t.ex. tryckte på ”E” innan den kommit fram till en dörr så var texten borta. Detta har dock bara hänt en gång under de 10 gångerna vi testat. Jag skulle kunna lägga till att den måste gå genom dörren innan texten försvinner men det får i sådana fall bli något till final.

Jag hoppas att denna post varit lärorik och kan hjälpa folk som funderar på att göra likadant eller bara generellt ge idéer om hur man skulle kunna göra.

Speldesign #4

Hej, nu tänker jag skriva lite om en artefakt jag arbetat på. Denna vecka har jag specifikt arbetat på en meny. Jag tog på mig detta för jag hade en idé om hur man skulle kunna göra. Jag testade min idé och den funkade fin fint. Jag gjorde med hjälp av programmet vi jobbar med (Visual Studio) att jag skrev fram tre olika texter. En för vardera alternativ.

Som alternativ har vi: Featured image

– Start Game

– Options

– Exit

Det är ganska uppenbart vad dom gör men tänker ändå snabbt gå igenom dom.

Start Game – sätter igång själva spelet.

Options – har ingen direkt funktion utan är ännu ett arbete pågående. I Options är det meningen att man skall kunna höja och sänka volymen och om jag hinner skulle jag kunna lägga in ett alternativ som gör att man får välja mellan fullscreen eller windowed. Vissa människor föredrar windowed så tänkte att det vore snällt att lägga till det som ett alternativ.

Exit – stänger bara av programmet.

Hur jag gjorde var att jag skrev ut tre olika texter som jag placerade uppe till vänster som skulle representera de olika valen. Sedan skapar jag en liten gul pekare för att visa användaren vart den befinner sig. Jag gjorde den gul för att den skulle sticka ut lite från resten vilket skulle göra det tydligare för en användare att använda sig av menyn.

Jag försökte experimentera med att även lägga till en triangel till höger om fyrkanten så den skulle se ut som en pil, men stötte på ett problem. Det blev en pil när man startade upp spelet men om spelaren förlorade och kom tillbaka till menyn så vred sig allt av någon mystisk anledning jag inte känner till. Så jag gav upp idén om att ha en pil och körde på att ha en liten fyrkant istället.

Hur menyn fungerar är att fyrkanten jag skrev om tidigare kan gå mellan tre olika värden. I detta fall kan kan vi kalla dom ” 1, 2, 3″. Därefter kunde jag bara skriva koden så att dom olika värden fick beteenden.

Alternativ nummer 1 fick vara att man gick vidare till nästa scen. I detta fall var det att den gick vidare till spel-scenen.

Alternativ nummer 2 har som sagt inget direkt beteende. Så den ligger bara där för att se fin nu.

Alternativ nummer 3 så stänger man av hela programmet.

Så egentligen har inte den lilla fyrkanten något att göra med själva texten. Jag gjorde så här för jag hade en idé om att man kunde göra så. Det finns säkert smidigare sätt att lösa det på men detta fungerade så körde på det.

Speldesign Blogg #2

Denna vecka har jag arbetat lite på att få fram en HP-bar (HealthPoint bar). HP-baren ska visa hur mycket liv spelaren har Featured imagekvar efter att spelaren har skadats av en fiende. Det kommer finnas Health Packs, som när man plockar upp dem så får man tillbaka liv. Livet representeras av en röd linje på en grå ruta. Den röda linjen kommer att minska i storlek åt vänster om spelaren förlorar liv.

I den originella idén så är det meningen att det ska visas en telefon på skärmen och på telefonens skärm så ska det stå hur mycket liv spelaren har. Vi ändrade den idén för vi kände att det var bättre men mer visuell representation av livet. Vi valde att ha en HP-bar för att få spelaren att känna sig mer bekväm med det.

Detta är ännu ett arbete i progress. I början så gjorde jag det att jag laddade in två olika bilder, en grå rektangel och en röd rektangel. Den röda låg uppe på den gråa och med fullt liv så såg man hela den röda men om man tog skada så försvann det mer och mer av bilden. Det medförde lite problem eftersom strukturen på vår kod inte är helt 100% enkel att förstå. I början så hade jag problem med att få fram den över huvud taget på skärmen men insåg senare att det var för att skärmen var in-zoomad på spelaren vilket gjorde att när jag försökte rita ut mina bilder så lade sig dem längst uppe i hörnet av SPELET och inte spelaren. Så när jag sprang längst upp i hörnet så låg mina små bilder där.

Jag tog bort och började om på arbetet eftersom det inte var så optimalt att skriva så. Just nu håller jag på med kodens egna funktioner, då man kan skriva ut en rektangelformig figur och välja en färg för den. Så jag tänkte göra exakt samma princip som jag gjorde med mina bilder men använda mig utav kodens egna funktioner. Varför jag gör så är för att jag inte kan få det att fungera med att ta bort delar av bilden, som när spelaren skulle ta skada av en fiende, som jag ville.

Jag har i alla fall en grå ruta som skrivs ut som denna gång följer SPELAREN och inte läggs uppe i hörnet av spelet som jag råkade göra först. Nu ska jag bara lägga till en röd rektangel som ska ha en koppling till spelarens liv.

Speldesign #1

Jag har arbetat med animation till vårt spel. I tidigare kurs (spelprogrammering 1) så lärde vi oss hur man kan använda sig av ett sprite sheet så att man kan spela upp olika bilder med under en tid. Så det jag har gjort är att jag lärde mig från en tutorial från internet hur man skrev koden och sedan använde jag mig av den för att kunna spela upp en animation. I vår tidigare kod så kunde man kalla på ett textdokument som skötte animeringen men med denna kod får man skriva ner själv hur den ska fungera. Det gör det lite lättare ifall man kanske vill lägga till eller ta bort animering.

Koden går till så att man skriver in hur många bilder den ska spela upp och hur lång tid emellan bilderna. Även när den ska börja spela upp Featured imageanimationen. I mitt fall så ska den spelas upp när spelaren ska röra sig framåt. Vi gör ett spel som utspelar sig i rymden där det inte finns någon gravitation så spelaren tar sig fram med en jetpack på ryggen. Så animationen går ut på att det ska se ut som om det kommer ut eld från jetpacken. Själva astronauten är inte jag som har målat men jag gjorde elden bakom med hjälp av photoshop.

I detta fall så har jag en bild på en astronaut tre gånger om på samma bild (se bilden), och väljer att visa först gubbe 1, sen gubbe 3, sen gubbe 2. Varför jag inte tar 1 2 3 är för att när jag målade dit elden så råkade jag att rita den i fel ordning och är för lat för att ändra. Det spelar ingen roll inom kodningen men kanske ser konstigt ut om man ser på bilden jag använder. Men spelar man spelet så ser det rätt ut. Det är bara en enkel animation som vi kommer använda oss av till resten av spelet också.

Animation var så klart ett krav för spelet men varför just jag valde att skapa koden var för att jag hjälpte en kamrat med deras kod. När jag satt och hjälpte honom så såg jag hur koden fungerade och valde att följa samma tutorial som honom. Den var egentligen inte så svår att använda eller att få den att fungera. Men den skulle ändå bakas in i den kod vi använder oss av och eftersom jag har förståelse för den så kände jag att det var lika bra att jag tog hand om den.