lördag 27 juni 2015

SommarProjekt 2015

Då var det tid igen att skriva blogg. Den här gången påbörjar jag ett nytt projekt, ett nytt spel som jag ska utveckla själv. Spelet kommer vara en 2d sidescroller med målet att ta sig till toppen av ett torn före slut bossen tar sig dit. Om du hinner före så får du ett övertag i striden mot bossen och tvärtom när den hinner först upp.

Det är tänkt att det ska gå att spela som en spelare och om jag hinner så vill jag lägga in för två spelare och så att det stödjer handkontroller. Jag kommer att utveckla spelet i Visualstudio med SFML biblioteket och programmeringsspråket C++.

Så det jag gjort i veckan är följande. Jag har återanvänt en del kod från föregående projekt och sen skrivit om eller skrivit nytt för att det ska anpassas till min spelidé. Mest fokus den här veckan har varit att få i ordning så att sfml fungerar och en del på menyn så att den fungerar och ser hyfsat okej ut till folk ska börja speltesta.



Problem som jag fick var att sfml inte riktigt fungerade till en början och jag fick leta bland många forum på de felmeddelanden jag fick. Jag fick många felmeddelanden och många av dem var fel jag gjort när jag startade ett nytt projekt i Visualstudio.

När sfml väl fungerade så uppstod det många andra fel då jag återanvände gammal kod och var då tvungen att läsa igenom och skriva om den för att reda ut felmeddelanden och eventuella onödiga funktioner som jag inte kommer att ha användning av.


I det stora hela den här veckan har det gått bra även om jag inte riktigt hann så långt jag hade tänkt innan fredagen men förhoppningsvis kommer det att flyta på bättre nästa vecka då jag kommer börja mer på själva spelet, hur spelaren intrigerar med objekt och fiender i spelet.

torsdag 19 mars 2015

projektets ”sista”?

Välkommen till min blogg
Ja nu börjar det dra ihop sig till den slutgiltiga versionen av spelet och slutet av kursen.
Jag har lärt mig en hel del under den här tiden som jag kommer att ta med mig till nästa kurs.
Mycket har varit en stor uppförsbacke och många långa kvällar med problem som uppstår då jag inte riktigt har förstått kodstrukturen eller att jag testat mig fram till det som funkar. Det är tur att man har många runtomkring sig som är villiga att hjälpa till även om det är stressigt.
Nu vidare till vad jag har gjort i veckan! Jag har arbetat mest på bugfixar och knappar till pause menyn som är inne i ”gamestate”. Det är nog det jag kommer att prata om i det här blogginlägget.
Större delen av knapparna var redan klara i förra veckan och behövde bara mindre ändringar för att implementera den nya grafiken / bilderna för knapparna.

I pause menyn var knapparna nästan klara förra veckan med mindre bugs som behövde fixas, till exempel så var de inte hela tiden centrerade i mitten av skärmen, hur jag fixa det var att knapparna ”följer efter” spelaren. Det som händer är att när man trycker pause så blir de synliga och ändrar positionen till spelarens position. Sen har vi en smått genomskinlig bakgrund för att få spelaren att förstå när allt blir grått och pauseknapparan blir synliga så är spelet pausat.

Andra problem som uppstod var att spelet / update i gamestate inte blev pausat när vi trycker på ”esc” som är pauseknappen i vårat spel. Hur jag gjorde för att fixa till det var att Update i gamestate inta uppdaterades och enbart musen och knapparna uppdateras. När spelaren trycker på continue så Un-pausar man och ouit så återvänder man till menyn, några andra buggar som fortfarande återstår är att när man trycker på en knapp så kastas även projektilen / bumerangen i spelet, detta är för att vi bara läser av när knappen är nedtryckt och den fortsätter att mata in inputs när man håller in knappen och det är ca 3-5 uppdateringar på ett knapptryck så det uppstår då problem när man startar eller går ifrån pause i spelet. Med det avslutar jag veckans och projektets ”sista”? Blogg, på återseende!

Tack för visat intresse och hoppas att det var tillräckligt förståeligt för dig att läsa det här inlägget!
Med vänliga hälsningar

// Andreas Lundmark

torsdag 12 mars 2015

”GameOverState”

Den här veckan tänker jag skriva lite om hur jag tänkte när jag gjorde
”GameOverState” klassen och även lite om huvudmenyn då det är en och samma sak, bara i olika klasser.
”GameOverState” klassen påminner mycket om meny klassen  som jag gjorde förra veckan. Jag tog meny klassen som bas för att göra ”gameover”, när spelaren dör / blir fasttagen av fienden så ska spelaren se ”gameover” skärmen som är ett separat ”gamestate”.

”GameOverState” har för närvarande bara en backgrundsbild och en knapp som tar dig tillbaka till start menyn. Men i den slutliga versionen så kommer det finnas möjlighet att skriva in sitt namn om man har mer poäng än de topp 10 som har spelat tidigare. Eventuellt att det är i en separat skräm och sedan kommer man till ”scoreboard” som kan ta spelaren till huvudmenyn. Eftersom jag inte är riktigt klar så är det lite små finesser kvar, som till exempel när spelaren trycker på ”quit” från ”pause” menyn så blir det en bugg som gör att man inte har möjlighet att komma tillbaka till huvudmenyn. Det är en av buggarna som inte är fixade till beta visningen tyvärr.

Motgångar som jag har stött på är följande:
Att spelaren ska dö och sedan bryta ”Update” i ”Gamestate” för att komma till ”GameOverState” har inte riktigt fungerat fullt ut till en början. Jag löste det med lite hjälp genom att göra funktionen  med knapparna i ”gamestate” till en ”bool” som då i sin tur kan bryta” update” i ”gamestate”.
Genom att skriva ”return false” då spelaren dör eller om spelaren trycker på ”quit” i ”pausestate”.

Något mer som krånglade också när jag implementerade ”png” bilden, då jag helt enkelt gjorde en fel uträckning och fel beräkning på hur pass hög varje knapp var. Resultatet då det var fel blev att den tog med halva nästa knapp och enbart den första knappen såg bra ut. Jag löste det genom att dubbelkolla och skriva om beräkningen lite.

Problem med kollisionen var inte stora men en förskjutning av kollisionen var nödvändigt då  kollisionen blev för stor med de nuvarande knapparna. Problemet var att den lyste upp två knappar när du drog över de knapparna i mitten av huvudmenyn och ”GameOverState” menyn.
Jag löste genom att ta spritens bredd och höjd och sedan plussa på i x och y det som krävdes för att kollisionen sedan ska passa knappen.

Jag avslutar nu veckans blogg post, tack för visat intresse!
Med vänliga hälsningar..
//Andreas Lundmark

torsdag 5 mars 2015

Meny Knapperna.

Det jag tänker beskriva den här veckan är Menyknapparna som jag kodade.

Jag började med att göra en ny klass och i stort sett bara skriva av tidigare kod som jag behövde till menyknapparna. Jag försökte att skriva likadant som i andra klasser då det då blir lättare för gruppen att läsa och snabbt hitta i koden.

Meny kommer troligtvis att bestå av dessa sex olika knappar:
Start / Play. Som startar spelet och hoppar då in i gamestate.
Credits. Som bara byter bakgrundbild och visar våra namn, samt gör de andra knapparna osynliga.
Quit / exit. Som sedan gör de andra knapparna osynliga och gör ”Yes” och ”No” synliga.
CreditsReturn. Den här knappen kommer fram när man trycker på ”Credits” och ska ta spelaren tillbaka till start skärmen.
Yes. På den skärmen kommer spelet att fråga om du verkligen vill avsluta spelet och om du trycker på ja så avslutas spelet.
No. Om spelaren trycker på ”No” så går spelet tillbaka till att bara visa ”Start,Credits,Quit”

Meny knapparna har en hover effekt som är, när spelaren drar med musen över en knapp ska knappen byta bild / sprite. Till skillnad från föremålen som byter sprite när spelaren kommer nära föremålen så ska menyknappen byta sprite när musen är innanför knappen. Knappen är för tillfället 350x100 pixlar och har en placeholder sprite som är bara en blå bild när man inte håller över knappen och sen byter den till grön när man håller musen över knappen.
Mellanrummet mellan knapparna i lodrät riktning är för tillfället 50 pixlar.
Extra knappar som ”Yes”,”no” och ”CreditsReturn” är placerade på mitten av skärmen längst ned.

Problem som jag stötte på under utvecklingen av menyknapparna var att knapparna inte bytte bild då muspekaren drog över knappen, efter lite hjälp av en gruppmedlem insåg vi att ”MenuState” inte hade knapparnas ”update” i ”statets update”. Det löste jag genom att skriva:
”Start->Update(); ” och så vidare för alla knapparna i ”MenuStates Update” funktion.
Ett till problem var att jag inte satt ut positionen för alla kollisions boxar och då uppstod ett litet problem då alla boxar var på samma plats och snett ovanför den första meny knappen. Jag fixade problemet snabbt men det var ändå lite slarvigt av mig när jag skrev klassen.

Det som gick bra var att jag snabbt fick ihop knappklassen så att den fungerade även om inte just hover effekten fungerade så fungerade det ändå att trycka på knapparna.

Tack för visat intresse! Kom gärna med kommentarer och om jag missat någon viktig information eller något ni undrar över.

Hoppas alla får en bra helg!
// Andreas Lundmark

torsdag 26 februari 2015

Dörrar

Den här veckan tänker jag skriva om dörr objektet / dörrarna i spelet.



För att färska upp i bloggen vad för projekt jag jobbar på, så säger jag nu att det är Fancy-Mansion och vi har valt att göra dörrar och nycklar för att låsa av olika rum. Men med en nyckel som du kan hitta i andra objekt i omgivningen så kan du låsa upp de dörrarna.

Stegvis gör jag om vas-objektet / vas-klassen till en dörr. Vas-objektet som jag pratade om i en av mina tidigare blogg poster och är ett föremål som du kan bära omkring på, för att sedan sälja det och få poäng. Jag började med att ta bort alla onödiga funktioner från vasen och ändrade bilden till dörrens bild som en av våra grafiker har gjort.

Eftersom vi ska ha olika animerade dörrar som egentligen är laser ”dörrar” så var jag även tvungen att få spelaren att bara ha möjlighet att öppna de dörrar som han har nyckel till. För att testa det så gör jag så att spelaren bara kan öppna den första dörren men en If sats som sedan ska kolla ifall spelaren har rätt nyckel men för tillfället så kan spelaren bara öppna en av tre olika dörrar.
Det är tänkt att när man går förbi dörren ska något lysa upp för att markera att spelaren ska kunna öppna den här dörren. Det som är tänkt är att nycklarna ska vara i samma färg som lasertrålarna och på det sättet göra det extra tydligt för spelaren att de behöver en nyckel i samma färg.

Det som fortfarande inte är bestämt är om nycklarna ska försvinna om man använder dem eller om man ska kunna öppna alla dörrar med samma nyckel som delar färg. Alternativt en cooldown på att använda dem för att man inte ska kunna springa igenom spelet.

Motgångar än så länge är:
Kollisionsboxen fungerar inte riktigt då spelaren verkar kunna gå in i objektet från höger kant och underifrån. Jag misstänker att kollisionsboxen inte riktigt går ut till kanterna av objektet.
Att få olika dörrar i samma klass krävde lite eftertanke men till slut använde jag mig av en ”int m_door;” för att numrera dörrarna.

Dörren är inte klar och kommer nog inte bli färdig förrän nycklarna är klara med tanke på att de hör ihop. Men jag bör vara färdig med den även med lite buggar innan den här veckans slut.

Tack för visat intresse!
//Andreas Lundmark

torsdag 19 februari 2015

Score! fixa poängen

Den här veckan stod jag för att göra ett litet poängsystem och även skriva ut det på skärmen.
Det var några mindre motgångar men eftersom jag tidigare fick en förklaring på har man kan göra av en klasskamrat så gick det relativt smidigt att implementera poäng uppritningen i våran Gamestate.



Vad jag började med var att först skriva ut en ”hello world” så att jag såg att texten visades på skärmen. Jag upptäckte då att jag behövde en Font, så jag laddade ned en arial.ttf fil som innehåller textfonten. Det verkade tyvärr som att den filen var korrupt eller en fusk, efter lite hjälp från andra så blev jag hänvisad till en annan sida med fontfiler som fungerade. Det var surt att tid gick åt till att försöka hitta ett fel i koden då det egentligen var filen det var problem med, men jag lärde mig något på det... testa olika filer ifall koden inte fungerar kan det vara filen som är problemet.

När jag sedan fått ut text på skärmen så började jag försöka skriva ut ”m_score” variabeln från player klassen, den håller i antalet poäng. Det fungerade inte att skriva ut antalet poäng direkt eftersom ”m_score” är en ”int variabel” och håller i siffror så kan inte ”setString” skriva ut poängen. För att lösa det var jag tvungen att skriva:

m_showScore.setString("Score: " + std::to_string(player->GetScore()));

std::to_string(poäng) ska omvandla ”int” till ”char” som ”setString” kan använda, det var så jag förstod det när jag skrev koden, jag fick det även snabbt förklarat för mig.

Nästa utmaning då jag skapade poäng funktionen var att få den att placera sig i hörnet på spelfönstret. Jag valde att använda mig av spelarens position och bara förskjuta poäng uppritningen, felet som vi snabbt såg var om vi gör fönstret mindre så försvinner poängen utanför skärmen. Jag var tvungen att hitta ett sätt att poängen ska följa spelfönstret och position beroende på hur stort fönstret var. Lösningen är nedanför och förklaring nedanför koden.

m_showScore.setPosition(
draw_manager->GetRenderWindow()->mapPixelToCoords
(sf::Vector2i(draw_manager->GetRenderWindow()->getSize().x/1.3, 1)));

”m_showscore” är poängen, hur vi kommer åt spel fönstret är genom att skriva: Draw_manager->GetRenderWindow()->.
Sedan så måste vi göra om pixlarna till en position: mapPixelToCoords->.
Vid så här mycket kod har vi hämtat fönstret och för att även bestämma en plats i fönstret så måste vi skriva inom den sista parentesen: Draw_manager->GetRenderWindow()->getSize().x/1.3, 1.
Alltså hämta fönstrets storlek och sedan i X led ändras positionen på poängen, beroende på fönstrets storlek.

Tack för att du tittade in!
//Andreas Lundmark

torsdag 12 februari 2015

Plocka upp vasen!

Det här är mitt första blogginlägg för det aktuella grupparbetet. Vi har valt att göra ett spel på spelkonceptet ”Fancy Mansion” som grupp 15 skrev.

Den här veckan vill jag skriva om föremålet som jag implementerade i spelet, för tillfället är spelet i pre-alpha och det finns fortfarande buggar kvar att fixa innan alphan. Vasen är ett objekt i spelet som spelaren ska plocka upp och placera på en ”dropzon” för att erhålla poäng/pengar som är målet med spelet.

När jag kodade Vas klassen så återanvände jag mycket av andra objekts kod, vilket redan var färdigskriven, det gör jag bara för att få ut ett objekt i spelet som inte har några speciella värden förutom kollisions box och en sprite/bild. Efter att grunden var implementerad så började jag att koda på en funktion så att spelaren kan ta upp objektet och gå runt med det. Vasen tar spelar-spritens position för att följa efter spelaren när den hålls av spelaren. När det fungerade någorlunda bra så började jag skriva på olika ”states” som är olika tillstånd. I det här fallet bara ett sant eller falskt tillstånd är möjligt. Jag var även tvungen att men den mängd kunskap jag har, skapa en variabel i player/spelaren med som också är sant eller falsk för att se om spelaren håller i föremålet.


Nästa steg var att visa spelaren ifall han kan ta upp föremålet, då kodade jag en ”hover” effekt som byter bild på vasen när spelaren håller musen över objektet och är inom ett bestämt avstånd från vasen.  Spelaren kan bara hålla i ett av de större objekten åt gången under spelets gång, därför behövde jag även lägga till en funktion som kollar om spelaren redan håller i ett av de större objekten och då förhindra spelaren från att ta upp fler föremål. Jag väljer att göra ”bool”(sant/falskt) variabler i spelaren och objekten för att det är lätt att kontrollera då det vi ska kolla på bara är sant eller falskt. Sen så är min kunskaper begränsade och därför kodar jag på det sättet.




När upplockning och släpp (pickup/drop) av föremålen var implementerade så kodade jag lite mer på när du släpper föremålet på en ”dropzon” så ska poängen öka i spelarens poäng variabel, för tillfället är det ett fel som uppstår när spelaren placerar vasen på två ”tiles”(plattor) samtidigt och då dubblas poängen som objektet ska ge till spelarens poäng, det ska inte hända. Men den bugfixen får vänta till nästa vecka.

//Andreas Lundmark

lördag 3 januari 2015

Januari 2015

The project is going forward and i´m proud of myself for finally learning some code, how to structure it and read code.

The advancements in the project is that i have implemented a background. Moving player and a wall object that the player can´t move past it.