Game Maker

Game Maker

Shooter

Achtergrond

We gaan beginnen met het maken van een achtergrond. De makkelijkste manier om dit te doen is met een getegelde achtergrond. Om te beginnen zullen we een afbeelding moeten hebben, die we als achtergrond willen gaan gebruiken. Download de onderstaande afbeelding. Je kan een afbeelding downloaden door met je rechter muis knop te klikken op de afbeelding en dan Bewaar Afbeelding Als … te selecteren.

Als je Construct opent, zie je dat het scherm in drie delen is ingedeeld. In het midden van het scherm zie je als het goed een leeg wit vlak. Dit is het onwerp van je level. Dubbelklik ergens in dit witte vlak. Er verschijnt nu een Nieuw Objecttype Maken scherm. Dubbelklik in dit scherm op Getegelde Achtergrond.

De muis zal nu veranderen in een “crosshair”. Je moet nu bepalen waar in het scherm je nieuwe object moet komen. Klik voor nu maar gewoon ergens midden in het scherm. De Tegel Achtergrond Editor zal vervolgens geopend worden. Klik op het mapje symbool (zie afbeelding) en selecteer waar op de computer je je achtergrond afbeelding hebt opgeslagen.

Je achtergrond beslaat nu maar een klein deel van het level. We willen natuurlijk dat de achtergrond het hele level ontwerp bevat. Als de afbeelding geselecteerd is verschijnen aan de rechterkant van het scherm de eigenschappen van de afbeelding. Set in de eigenschappen de positie op 0,0 en de grootte 1708x960.

De achtergrond blijft voortaan altijd op dezelfde plek staan. We willen eigenlijk voorkomen dat we de achtergrond per ongeluk verplaatsen. We gaan de achtergrond daarom vastzetten. Klik met de rechtermuisknop op de achtergrond. Klik vervolgens op vergrendelen -> vergrendel selectie.

Game Objects

Nu we de achtergrond hebben, kunnen we andere objecten toevoegen. Download eerst alle onderstaande afbeeldingen. Misschien is het handig als je een mapje maakt op je computer voor VMA waar je de afbeeldingen inzet.

Voor al deze afbeeldingen gaan we een Afbeelding object maken. Dubbelklik opnieuw ergens in het scherm. We krijgen wederom het Nieuw Objecttype Maken scherm. Dit keer selecteren we Afbeelding. Er opent zicht nu een nieuwe editor, maar deze editor lijkt heel erg op die van de achtergrond. Waarschijnlijk weet je dus al wat je moet doen. Selecteer de juiste afbeelding. Voordat je het scherm afsluit, moet je echter de naam aanpassen. Anders gaan al je afbeeldingen Animation 1, Animation 2 etcetera heten. Dat is niet zo handig, want dan kunnen we de afbeeldingen niet meer terugvinden. Noem in plaats daarvan de afbeeldingen: speler, monster, kogel & explosie.

Gedragingen

Momenteel hebben we eigenlijk geen game. Het is meer een plaatje. In een game reageren objecten op elkaar en op de speler. Dit zorgt ervoor dat de speler een bepaalde mate van controle heeft over de game. Meestal moeten we heel precies aangeven hoe game objecten moeten reageren. Bepaalde type reacties komen echter heel vaak voor in games. Construct heeft deze reacties dan ook alvast ingebouwd als een Gedrag. We hoeven dan alleen nog maar een gedrag aan een object te koppelen.

Een bekend gedrag in games is bijvoorbeeld het 8-richtingen gedrag. Dit gedrag houdt in dat een object in 8 verschillende richtingen kan bewegen. De speler bestuurt het object met de pijltjes toetsen. Het 8-richtingen gedrag is ideaal voor het speler object. We willen immers dat het karakter van de speler over het scherm beweegt. De besturing met pijltjestoetsen is ook vrij bekend, dus waarschijnlijk snapt de speler snel wat de bedoeling is.

Selecteer het eerder gemaakte speler object. In het scherm aan de linker kant zie je een menu genaamd Gedragingen. Klik hierop en klik vervolgens op Nieuw Gedrag Toevoegen. Je krijgt nu een hele lijst met gedragen te zien, selecteer 8-richtingen.

Onze game is nog niet heel interessant, maar hij is nu wel speelbaar. Het is dan ook tijd om hem een keer te testen. Druk op het zwarte pijltje boven in het scherm. Er zal zich een nieuw scherm openen waarin je de game kan uittesten. Probeer je eigen spel eens uit. Tegen welk probleem loop je aan.

Het probleem waar je waarschijnlijk tegen aanloopt is dat de speler na een tijdje uit je beeld zal lopen. Dit probleem heeft twee oorzaken. Enerzijds kan de speler uit het bereik van de camera lopen. Anderzijds kan de speler ook volledig uit het level lopen. We kunnen dit oplossen door nog twee gedragingen toe te voegen aan de speler. Het Scroll Naar gedrag zorgt ervoor dat de camera mee beweegt met het object. Het Gebonden aan Ontwerp gedrag zorgt ervoor dat het object de wereld niet uit kan bewegen.

Monsters

Onze vijanden staan momenteel gewoon stil in het scherm. Dat is natuurlijk een beetje saai. Net zoals bij het speler object, kunnen we ook aan het vijand object gedragingen toevoegen. Eigenlijk hoeven de monsters niet veel bijzonders te doen. We willen dat de monsters bewegen. Dit mag gewoon in een richtte lijn zijn, zolang ieder monster dan maar in een andere richting beweegt.

We kunnen hier het Kogel gedrag voor gebruiken. Zoals de naam al doet vermoeden gedraagt het monster zich dan als een kogel. Het object wordt afgevuurd in een bepaalde richting en blijft vervolgens in die richting bewegen. Standaard is dit de richting waarop het monster kijkt.

Probeer de game eens uit. Je zult zien dat de monsters heel snel bewegen. Dat is misschien handig voor daadwerkelijke kogels, maar wat minder handig voor monsters. Als je het monster selecteert zie je in het rechter menu alle gegevens van het monster. Onderdeel van die gegevens is de informatie over het kogel gedrag. Er is daar ook een snelheid aangeven. Standaard staat die op 400. Zoek zelfs eens een realistischer snelheid uit.

Soms wil je meerdere versies van hetzelfde object hebben, bijvoorbeeld bij de monsters. Je wilt dat ieder monster precies hetzelfde doet, ze moeten echter wel onafhankelijk werken. Anders zouden namelijk alle monsters doodgaan, zodra een monster geraakt wordt. Als je het monster object selecteert in het linker menu, kan je meerdere monsters je level in slepen. We maken onderscheid tussen game objecten en specifieke versies van objecten. Als je op een plaatje klikt in het level selecteer je een specifieke versie van het object. Als je de naam van een object selecteer in het rechter menu, selecteer je het hoofd game object. Wijzigingen aan dit object worden doorgevoerd in alles versies van het object.

Gebeurtenissen

Gedragingen zijn handig als je snel verschillende game object wilt maken. Soms is het echter nodig als je veel preciezer kan aangeven wat er moet gaan gebeuren. Hier kan je Gebeurtenissen voor gebruiken. Gebeurtenissen worden in een apart blad bijgehouden. In het midden bovenin kan je het blad selecteren. Waarschijnlijk staat het blad nu op Ontwerp 1, dit is je eerste level. Verander het blad naar Gebeurtenissen.

Bij een gebeurtenis moet je altijd twee dingen aangeven. Wanneer moet iets gebeuren? Wat moet er gebeuren. Klik op gebeurtenis toevoegen. Je moet eerst vertellen wanneer er iets moet gebeuren, dit is de daadwerkelijke gebeurtenis. Daarvoor selecteer je eerst het object dat moet kijken of er iets gebeurd. In dit geval willen we het monster selecteren en daarna Bij Creatie.

Daarna kan je een actie toevoegen. Acties geven aan wat er moet gebeuren zodra een gebeurtenis plaats vindt. Je kan meerdere acties aan dezelfde gebeurtenis hangen. We gaan onze eerste actie toevoegen. We willen dat het monster wat doet, dus we moeten wederom het monster selecteren. Daarna kiezen we Zet hoek op. Dit verandert de richting waarom het monster moet kijken. Deze richting wordt aangegeven met graden, net zoals bij een kompas of bij een wiskundige cirkel. We kunnen een specifiek getal meegeven, maar dan kijken alle monsters nog steeds dezelfde kant op. We willen liever een willekeurig getal kiezen tussen de 0 en 360. We doen dit door willekeurig(360) te typen.

Als je de game test, wordt het spelletje al een stuk interessanter. De monsters gedragen zich nu allemaal net anders. Na een tijdje zijn alle monsters echter het scherm uitgelopen en sta je gewoon na een leeg scherm te kijken. We zouden graag willen dat de monsters terug het scherm in lopen. Het is al helemaal leuk als het lijkt alsof de monsters de speler achtervolgen.

We gaan een nieuwe gebeurtenis toevoegen. De monster is buiten het ontwerp gebeurtenis. Vervolgens gaan we een actie toevoegen. Kies opnieuw voor het monster en selecteer vervolgens de zet hoek richting actie. Deze actie laat het monster richting een bepaald punt lopen. Deze punten worden aangegeven met een zogenaamd coördinaat systeem. De positie wordt dan aangegeven met een X (horizontaal) en Y (verticaal) positie. In dit geval willen we altijd de positie van de speler overnemen. We doen dit door speler.x en speler.y te typen. Als jij het speler object anders genoemd hebt, moet je hier natuurlijk ook wat anders schrijven.

Kogels

De monsters kunnen nu de speler aanvallen, dus misschien is het wel zo eerlijk als de speler kan terugvechten. We gaan daarom kogels toe voegen aan ons spel. Een geweer moet natuurlijk gericht kunnen worden, en dat is momenteel best lastig in ons spel. Om dit wat makkelijker te maken, willen we dat de speler altijd kijkt in de richting van de muis.

Hiervoor gaan we opnieuw de “zet hoek in richting van een positie” actie gebruiken. We hebben natuurlijk wel een nieuwe gebeurtenis nodig. We willen dat deze actie constant blijft gebeuren, zodat de speler altijd naar de muis blijft kijken. Een goede optie om dit te bereiken is het “systeem -> elke tick”. Een tick is gelijk aan 1/60 seconde. Dit event gebeurd dus zo ontzettend vaak, dat het voor de gebruiker eigenlijk niet meer op te merken is.

De “zet hoek in richting van een positie” kan de speler laten kijken naar een specifiek object. De muis is momenteel nog geen onderdeel van onze game, en bestaat volgens Construct dan ook niet. Om dit op te lossen, gaan we het Muis object toevoegen aan ons spel. Klik op nieuw object toevoegen en selecteer het type muis.

We kunnen nu de parameters van “zet hoek in richting van een positie” correct maken. We willen dat de x-positie gelijk is aan de x-positie van de muis. De y-positie moet gelijk zijn aan de y-positie van de muis. Zie het plaatje voor hoe je dit in het scherm moet typen.

Als de speler op de spatiebalk klikt, moet zijn karakter een kogel afschieten. We voegen daarom een nieuwe gebeurtenis toe genaamd “muist -> bij links knop geklikt”. Aan deze gebeurtenis koppelen we de “speler -> maak nog een object” actie. In het menu selecteer je het kogel object. De laag en afbeeldingspunt mogen voor nu nog even op 0 blijven staan.

De kogel wordt nu gemaakt midden in het poppetje. Dat ziet er natuurlijk een beetje raar uit. Het is mooier als de kogels gemaakt worden bij het geweer, zodat de kogel echt uit het geweer lijkt te komen. We moeten hiervoor eerst een nieuw afbeeldingspunt toevoegen. Open de plaatjes editor. Aan de linker kant zie je een menu genaamd afbeeldingspunten. Als je daarin met de rechter muis klikt, kan je een nieuw afbeeldingspunt toevoegen. Sleep het nieuwe afbeeldingspunt naar het geweer toe.

We moeten nu de “maak nog een object” actie aanpassen, zodat de kogel gemaakt wordt op afbeeldingspunt 1. Geef vervolgens het kogel gedrag aan het kogel object. De kogels zullen nu ook echt afgeschoten worden. Als laatste voegen we het “vernietig buiten het ontwerp” gedrag toe aan de kogel. Anders blijft de computer berekeningen maken voor de kogel, ook als deze al lang uit de game verdwenen is.  

Explosie

Als de monsters geraakt worden door een kogel, zouden ze natuurlijk dood moeten gaan. Dit betekend eigenlijk dat het monster object vernietigd moet worden. Hetzelfde geldt natuurlijk voor de kogel. Hiervoor hebben we de “Bij botsing met ander object” gebeurtenis en de “vernietig” actie nodig. Probeer zelf eerst eens hoe je dit moet maken. Als het niet lukt, kan je een beetje spieken in het onderstaande plaatje.

De dood van het monster is momenteel niet echt episch. Het monster verdwijnt simpelweg uit beeld. Door een explosie toe te voegen, kunnen we het spel al een stuk toffer maken. Daarvoor gaan we eerst weer Explosie afbeelding toevoegen. Daarna moeten we de “maak een ander object” actie gebruiken in de botsing gebeurtenis. De explosie moet gemaakt worden door de kogel of het monster. Let er op dat dit gebeurd voordat het object zelf vernietigd wordt.

De explosie ziet er nu natuurlijk een beetje raar uit. De zwarte achtergrond is nog steeds zichtbaar. Als je in het eigenschappen menu van de explosie kijkt zie je daar een submenu genaamd Effecten. Ze de samenvloeiing modus op toevoeging. Dit zorgt ervoor dat alle zwarte pixels niet getekend worden. We zien dan dus alleen de daadwerkelijke explosie.

Een laatste stap is het langzaam laten verdwijnen van de explosie. Hiervoor kunnen we het Vervagen gedrag gebruiken. Onthoud dat je hiervoor in het eigenschappen menu moet kijken bij Gedragingen.

Levens

Een belangrijk concept bij programmeren zijn zogenaamde Variabele. In Construct ieder game object kan zijn eigen variabele bijhouden. Variabele zijn eigenlijk gewoon getalletjes die een naam hebben. Je kan ze vervolgens hoger en lager maken of gebruiken in berekeningen. Dat lijkt een beetje op het gebruik van letters of woorden bij Wiskunde.

We kunnen bijvoorbeeld een variabele maken die de levens bijhoudt van monsters. Ga naar de eigenschappen van het Monster object. Selecteer vervolgens Instantievariabelen en dan Nieuwe Instantie Variabelen Toevoegen. Zet de waardes gelijk aan, hoe ze in de onderstaande afbeelding zijn weergegeven. De initiële waarde staat nu op 3. Dit betekend dat monsters drie levens hebben. Je kan dit eventueel ook hoger of lager maken.

Als een monster geraakt wordt door een kogel, zo hij nu niet gelijk meer dood moeten gaan. In plaats daarvan willen we dat de levens alleen met 1 verminderd worden. De “Monster vernietig” actie moete dus worden weggehaald en vervangen worden door een andere actie. Dit kan je het makkelijkst doen door met je rechtermuisknop op de actie te klikken en daarna op Edit te klikken. De nieuwe actie die we willen gebruiken is “Aftrekken van”.

Als de levens van het monster op zijn, zou hij natuurlijk alsnog vernietigd moeten worden. We gaan daarom een nieuwe gebeurtenis toevoegen. We gebruiken de “Monster -> Vergelijk Instantie Variabele” gebeurtenis. We willen iets doen als het monster 0 levens heeft. In principe kunnen we dan “levens = 0” gebruiken. Het kan echter zijn dat twee kogels toevallig gelijker tijd het monster raken, waardoor de levens ineens op -1 staan. Het is dan ook veiliger om “levens <= 0” (kleiner of gelijk aan) te gebruiken.

Score

Variabele kunnen we voor nog veel meer dingen gebruiken. Zo kunnen we bijvoorbeeld de game een score laten bijhouden. Op die manier kan de speler steeds beter worden in het spel. Ook kunnen spelers dan onderling kijken wie het best is, door hun scores te vergelijken.

De eerste stap voor het toevoegen van scores is het maken van een nieuwe variabele. Normaal zouden we dan moeten kiezen welk object de variabele moet bijhouden. We willen echter zeker weten dat er maar een variabele score wordt bijgehouden. We kunnen dan ook beter een globale variabele toevoegen. Dit zijn variabele die door het spel zelf worden bijgehouden en gebuikt kunnen worden door alle objecten. Om een globale variabele toe te voegen ga je naar het gebeurtenis blad. Klik dan met je rechtermuisknop en selecteer “Globale variabele toevoegen”.

Globale variabele werken redelijk hetzelfde als normale variabele. Eigenlijk weet je dus al hoe je ervoor kan zorgen dat de score 10 hoger wordt, iedere keer als je een monster dood. Het enige verschil is dat het Game Object dat de actie moet uitvoeren nu het Systeem is. Probeer het maar eens uit.

De score wordt nu wel bijgehouden, maar de speler krijgt de score nooit te zien. Dat is natuurlijk niet heel erg handig. Om deze informatie te delen gaan we een HUD (Head-Up Display) ontwerpen. Hiervoor hebben we het Lagen scherm nodig. Het kan zijn dat je dit scherm eerder hebt afgesloten. Via Menu -> Weergave -> Balken kan je het scherm dan weer terugkrijgen. Klik met je rechtermuisknop in het Lagen scherm en selecteer “Voeg bovenaan een nieuwe laag toe”. Het is handig als je de laag HUD noemt, dan blijft het overzicht duidelijk.

In onze nieuwe HUD laag gaan we een Tekst Object maken. Zorg dat je aan in lagen de HUD geselecteerd hebt, en klik dan ergens in het ontwerp om een nieuw object te maken. Tot nu toe selecteren we vervolgens Afbeelding, maar deze keer gaan we voor Tekst. Geef het object een voor jouw makkelijk te onthouden naam. Probeer de naam wel anders te maken, als die van je variabele score. Dit kan je bijvoorbeeld doen door alle objecten namen te geven die beginnen met een hoofdletter, en de variabele namen te geven die beginnen met een kleine letter.

In het eigenschappen menu van het Tekst Object kan je van alles aanpassen. Maak de tekst bijvoorbeeld eens geel met een lettertype grote van 24. Ook de daadwerkelijke tekst is aanpasbaar. We kunnen dit bijvoorbeeld veranderen naar “Score: ”. Dat helpt ons echter nog niet met het zichtbaar krijgen van de score. Daarvoor moet de tekst tijdens het spelen eigenlijk constant opnieuw aangepast worden. We gaan daarom een nieuwe actie toevoegen aan de gebeurtenis Systeem -> Elke tick. De actie die we willen gebruiken is Tekst Object -> Stel tekst in. Neem de precieze tekst voor nu even over uit de onderstaande afbeelding.

De score staat momenteel vast in het level. Dat betekent dat de tekst niet mee beweegt met de camera. Dat hoort natuurlijk niet. We willen dat de hele HUD laag mee beweegt met de camera. In het eigenschap menu van de HUD laag zie de eigenschap Parallax staan. Zet deze op 0% bij 0%. De laag beweegt nu mee met de camera.

Meerdere Levels

Onze game is inmiddels redelijk compleet. Na een tijdje zijn alle monsters echter dood en is er weinig meer te doen. We zouden natuurlijk gewoon weer nieuwe monsters kunnen maken, maar dan blijft het spelletje eigenlijk altijd hetzelfde. Het is leuker als de speler steeds moeilijkere levels kan bereiken.

In Construct heten levels “ontwerpen”. We hebben momenteel 1 ontwerp. Veranderd de naam van je ontwerp naar “Level 1”. Vervolgens gaan we een tweede ontwerp toevoegen. Druk met je rechtermuisknop op Ontwerpen -> voeg opmaak toe. Je zal nu de vraag krijgen of er ook een nieuw gebeurtenisblad moet worden toegevoegd. We willen dat de besturing hetzelfde blijft en selecteren dus de optie “geen gebeurtenisblad toevoegen”. Zodra we klaar zijn hernoemen we het nieuwe ontwerp gelijk naar “Level 2”. Dat voorkomt dat we later in de war raken.

Ga naar het Eigenschappen scherm van je net nieuwe “Level 2” ontwerp. In de eigenschappen kan je het ontwerp koppelen aan een gebeurtenisblad. Voor “Level 1” is dit automatisch gebeurd toen we de game gemaakt hebben. Voor “Level 2” zullen we dat echter handmatig moeten doen. Waarschijnlijk staat er nu Gebeurtenis blad: geen. Verander dit naar Gebeurtenissen blad 1.

Nu het nieuwe level klaar is voor gebruik, moeten we ervoor zorgen dat de speler het nieuwe level ook daadwerkelijk kan bereiken. We kunnen bijvoorbeeld bouwen dat de speler naar het tweede level gaat als hij meer dan 30 punten heeft. We moeten dan het Systeem constant laten checken of de speler inmiddels meer dan 30 punten heeft. Zodra dit het geval is doen we de actie Systeem -> Ga naar ontwerp (op naam).

Als je de game nu uitprobeert, kan je het nieuwe level daadwerkelijk bereiken. Zodra het nieuwe level begin, gebeurt er echter iets vreemds. De speler kan niet langer kogels schieten of bewegen. Dit komt omdat het level constant herstart wordt. We hebben immers nog steeds 30 punten. We moeten de gebeurtenis daarom wat uitbreiden. Als je met de rechtermuisknop op de gebeurtenis klikt, kan je een extra gebeurtenis toevoegen. Het systeem houdt de level naam bij in een variabele genaamd OntwerpNaam. We willen alleen van level wisselen als de OntwerpNaam gelijk is aan “Level 1”.

Overig

Meer Plaatjes

  • Het arrangement Game Maker is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteurs
    Timo Overbeek Je moet eerst inloggen om feedback aan de auteur te kunnen geven.
    Laatst gewijzigd
    2020-10-30 13:36:48
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Toelichting
    VMA Game Maker
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Studiebelasting
    4 uur en 0 minuten
  • Downloaden

    Het volledige arrangement is in de onderstaande formaten te downloaden.

    Metadata

    LTI

    Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI koppeling aan te gaan.

    Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.

    Arrangement

    IMSCC package

    Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.

    Meer informatie voor ontwikkelaars

    Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op onze Developers Wiki.