Efter att vår Alfa-presentation fick kompletteringar att göra så har jag suttit och jobbat med dessa. Det vi fick komplettering på var att man ska kunna döda fienden som fanns och att ha en fungerande HUD.
Det jag satt med mest var vår Heads Up Display, aka HUD, som spelaren ser när han eller hon spelar spelet. Den kan representera hur mycket skada spelaren tål eller hur mycket skott kvar spelaren har att skjuta. Just vår HUD, för tillfället, visar bara hur mycket skada spelaren kan ta samt hur mycket den har tagit med hjälp av en mätare. Saker som ska tillkomma är en sköld, så spelaren kan ta extra mycket skada, den genereras dessutom när spelaren inte tagit skada på ett tag, samt en räknare för hur mycket skott som spelaren har kvar på sitt andra vapen. Men som sagt så har jag hittills bara lagt till en livmätare.
Det första jag behövde tänka på var hur jag skulle få mätaren att kunna röra på sig. Min tanke var att skapa en grön rektangel bakom den genomskinliga tuben som Peter har ritat. Så jag skapade en klass till HUDen och började med att lägga in bilden på den och rektangeln som skulle föreställa livet. Sedan kollade jag så jag blev nöjd med hur den såg ut i spelet. Det lätta med detta är att det handlar om väldigt lite kod att skriva, allt som görs som sagt är att lägga in en bild och att skapa en rektangel. Men det första jobbiga jag kom på var hur jag skulle kunna rita ut bilden på spelets view, som är det man ser av spelplanen. Jag började med att rita ut den bara på spelbanan, vilket gjorde att den ritades ut högst upp i vänstra delen av spelplanen, såklart. Så jag ritade ut den på spelarens position och subtraherade hälften av bredden på skärmen och addera med hälften av höjden, eftersom spelaren befinner sig i mitten av skärmen. Detta gjorde att HUD-bilden betedde sig konstigt och rörde sig runt lite grann när man körde med skeppet. Min lösning var att rita ut det på en ny view som läggs ovanpå spelets view, men som också följer efter spelarens rörelser. Detta löste även problemet med att jag ritar ut en svart bild ovanpå hela spelet för att rita ut ljuset som fick HUDen att bli synlig endast när man lös på den.
Nu till det verkliga problemet, hur ska jag få rektangeln att bli mindre när spelaren skadas? Jag kollade runt i rektangelklassens egna funktioner och två stycken verkade funka för mig: scale() och setScale(). Jag började med scale som fungerar att den tar in två värden, ett x och ett y värde som sedan multiplicerar värdena med den originella storleken på rektangeln. Det jobbiga med detta, som jag kom på, är att om spelaren tar 10 i skada (spelaren har 100 i liv) så är det 100*0.9, men nästa gång spelaren skadas så är inte 0.9 * 90 = 10 utan 9 etc. Så min lösning blev tillslut att ha ett maxlife och ett currentlife. Maxlife är alltid 100 och currentlife ändras när spelaren tar skada. Jag ändrade också till setScale istället som fungerar så att den tar två värden som scale men den multiplicerar original värdet med det nya värdet. Så ifall rektangeln är 100 i längd och jag använder setScale(2,1) så multipliceras 100 med 2. Jag ändrade också rektangeln till en pixel bred och satte setScale(100, 1). Koden som ändrar storleken på rektangeln:
void HeadsUp::GotHit(float damage)
{
currentlife -= damage;
hSprite.setScale(currentlife, 1);
}
currentlife är likamycket som maxlife vilket är 100. Nu skadas spelaren 10 skada istället så damage blir 10 istället för 0,9. Detta fungerade mycket bra och jag gjorde samma uträkning för att få tillbaka liv men adderar heal istället för att subtrahera damage från currentlife.