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