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

1 kommentar:

  1. Andreas du har skrivit lätt läst blogg som också är väl skriven blogg och lätt förstålig. Man Förstår vad du gjort och vilka problem du har haft samt hur du löst dem. Du har förklarat bra igenom att förklara vad du har gjort. Du visar de också igenom att visa kod som förklarar att man först måste ändra en int variabel till en string innan man kan skriva ut den på skärmen.

    De är väldigt bra förklarat om hur du skriver ut saker på skärmen men de hade varit lite roligt att få läsa om hur man får score och vad score gör i spelet också efter som att det är score som du specifikt skriver om. Men väldigt bra beskrivet om hur man faktiskt skriver ut saker på skärmen detta hade man kunnat ta användning av om man skulle behöva skriva ut saker på skärmen själv.

    Litet tips till nästa gång när du vill ha fonter, är att de finns väldigt många av de vanliga fonter redan på datorn om man går in i kontrollpanelen och söker på Teckensnitt, där är de bara att kopiera fonten filen som man vill använda sig av. Detta var något jag lärde mig när jag skulle skriva ut text på skärmen.

    SvaraRadera