HealthBar, meltbar, meltdown -.-‘

Denna vecka har jag inte hunnit arbeta speciellt mycket pga att jag varit tvungen att komplettera en tidigare kurs där inlämningen var igår(onsdag). Därför har all fokus idag legat på att göra spelet godkänt för Alphan som ska visas upp. Det innebär för min del skapandet av ett GUI, eller för att vara mer exakt, endast en health bar för tillfället.

Vår tanke är att huvudkaraktären i spelet inte ska ha något direkt liv, utan det ska baseras på hur mycket luft han har kvar. Därför har jag gjort en AirBar, som visar hur mycket luft spelaren har i kvar i lungorna. Tanken var också att den här luftmätaren hela tiden ska ticka nedåt medans spelaren är under ytan, och ska långsamt gå uppåt när spelaren är över ytan för att hämta luft.

Till att börja med har en SpriteManager gjorts i vårt projekt, detta gjorde att jag antog att sprites skulle ritas ut genom denna spritemanager. Och eftersom att det var första gången jag skulle rita ut sprites i detta projekt blev det för mig ännu krångligare.

Jag började iallafall med att skapa en class som hette “HealthBar” som var tänkt att innehålla allt som behövdes för att rita ut det hela och få en sorts funktionalitet på den. Sedan försökte jag att lägga in sf::Sprite* i den constructorn, där jag senare skulle kunna skapa ett objekt GameState och därigenom ladda in texture i sprite OSV. Detta fungerade inte, eftersom att hela spritemanagern var felbyggd(byggd efter SDL, men tweakad till SFML eller liknande) och istället skulle SFMLs egna class för att lägga in sprite/texture användas. Detta fick jag inte reda på förrän jag rådfrågade vår lead programmer som föreslog att jag skulle använda SFMLs egna class.

Därefter var det relativt lätt att lägga in en textur, en sprite och sätta Sprite.SetScale på att vara lika med PlayerAir(alltså max mängd luft som spelaren kan ha i lungorna).

Detta gjorde att min textur upprepades och det blev som en lång ruta som var relativ till hur mycket luft som fanns kvar. För att reglera när spelaren gradvis förlorar luft använde jag mig av två IF-statements för att kolla när spelaren är under, respektive över ytan.

Capture

80486f81824df4207fa3ce22d1bf2807

Ovan syns IF-satserna, samt resultatet av det hela. Gifen är däremot inspelar under en tidigare version, där luften gick upp direkt jag kom över vattenytan.

När jag hade fått allt att fungera, råkade jag dessutom radera allt som jag hade skrivit under sessionen i GameState. Detta gjorde att när jag var klar, var jag tvungen att skriva om allting igen. CTRL + Z fungerade inte. Detta misstag gav mig ungefär en timmes extra arbete och en väl lärd läxa.. SPARA!

Under tiden jag arbetat med detta har jag lärt mig otroligt mycket vad gäller både SFML och programmering i sig. Till nästa gång skulle jag kanske ha frågat någon tidigare, då jag satt med det första sprite-problemet i säkert en bit över 3 timmar.

About Anton Olin

2015 Programming