Pagina 9 van 13
Scores, levens en health ('gezondheid')
Het is een beetje onbevredigend dat het spel eindigt wanneer je geraakt wordt. Om het spel wat interresanter te maken zullen we de vijanden schade laten veroorzaken. Alleen als het vliegtuig te veel schade heeft opgelopen zal het verwijderd worden. Ook zullen we meerdere levens maken en een mooi informatiepaneel maken dat informatie toont samen met de score. Gelukkig, dit is allemaal erg makkelijk omdat Game Maker ingebouwde mechanismes heeft om met scores, levens (lives) en gezondheid (health, in dit geval gebruikt als schade).

Om dit allemaal te maken, maken we een nieuw object genaamd controller_life. Het heeft geen sprite nodig aangezien het zichzelf tekent in het draw event. Zoals je weet, normaalgesproken in elke step wordt de ingestelde sprite voor ieder object getekend op de juiste positie in de room. Maar wanneer je acties in het draw event zet is dit niet langer het geval. Nu bepalen deze acties wat er getekend wordt.

Er is een hele collectie aan acties beschikbaar uitsluitend voor het tekenen op het scherm. De meeste kunnen worden gevonden in het Draw tabblad. Maar je kan ook andere acties hier gebruiken. Draw acties op andere plaatsen kan ook, maar simpel gezegd worden ze genegeerd.

Nu we starten hebben we een grote sprite nodig die als informatiepaneel dient. Sleep de volgende afbeelding in Game Maker en sla het op als sprite:

Het zal de score tonen, de schade (in het zwarte gedeelte aan de linkerkant), en het aantal vliegtuigen dat je nog over hebt (dat is het aantal levens). In het draw event (teken-event) van controller_life tekenen we dit informatiepaneel op de juiste positie met de actie om sprites te tekenen ('draw a sprite'). We vullen de eigenschappen in als volgt:

Dit zal de juiste sprite op de bodem van het scherm zetten. (Het gebruik van -1 voor het subimage (subafbeelding binnen een sprite) betekent dat de huidige subimage wordt getekend. Aangezien er maar 1 subimage in de sprite is hoeven we hier niet echt aan te denken, maar als een sprite meerdere subafbeeldingen bevat kun je hier aangeven welke subafbeelding je wil zien.) Om er zeker van te zijn dat het bodempaneel boven alle andere dingen ligt geven we het een diepte van -10000.

In zijn create event, zet het controller_life object de score op 0, het aantal levens op 3, en de health (schade/gezondheid) op 100. Er zijn acties hiervoor in het Score tabblad. Om de score te tekenen gebruiken we de juiste actie in het Score tabblad. (We stellen eerste de tekenkleur in op geel.) In de actie om score te tekenen, vullen we de eigenschappen als volgt in (geen titel omdat de titel al op de achtergrond staat):

Om levens te tekenen gebruiken we een ander mechanisme. In plaats van slechts het aantal te tekenen zullen we kleine afbeeldingen van een vliegtuig tekenen. Hiervoor gebruiken we een kleine sprite gebruiken die het vliegtuig moet voorstellen. Er is een actie hiervoor in het Score tabblad.

Aangezien we nu de score en het aantal levens zelf weergeven willen we dit niet langer in de titel van het venster zien staan. Er is een actie in het Score tabblad die aangeeft wat getoond moet worden in het venstertitel. Zet dit in het create event van het object om aan te geven dat niks getoond moet worden. Ook om de health te tekenen is er een speciale actie. De health is weergegeven in de vorm van een levensbalk. Je kan de positie, grootte en te gebruiken kleuren aangeven. We vullen de eigenschappen in als volgt:

Het totale draw event ziet er dan ongeveer zo uit:

Maar we moeten eigenlijk nog steeds controleren op de health en levens. Allereerst moeten we een aantal aanpassingen maken in het collision event van het vijandelijke vliegtuig met ons vliegtuig. Het zou niet langer ons vliegtuig moeten verwijderen, maar alleen zichzelf (het een explosie makend) en de health verminderen. We zetten de health dus relatief op -30 (dus ons vliegtuig kan 3 botsingen weerstaan).

Het controller_life object zal controleren of de health kleiner wordt dan 0. Er is hier een event voor onder Other in het events venster. In dit event blazen we ons vliegtuig op door er een grote explosie van te maken. Ook herstellen we de levens en spelen het juiste geluid. Het event ziet er dan dus zo uit:

Het grote explosie object, in zijn Animation End event vernietigt het zichzelf. Slaapt voor een tijdje, zodat het geluid afspeelt, maakt een nieuw vliegtuig aan op de huidige positie (dat is, relatief op positie (0,0)) en vermindert het aantal levens door het aantal levens relatief op -1 te zetten.

Tot slot moeten we controlere of de levens niet op zijn. Gelukkig is hier ook weer een event voor. Voor het controller_life object, in dit event tonen we de highscore lijst en herstarten we het spel. Dit concludeert de derde versie van het spel. Je kan het nu spelen en het ziet er al best goed uit. Maar het spel wordt snel saai. Dus we moeten het wat veranderen en wat meer variatie toevoegen.