Wat leer je?
- Waarom zwaartekracht een variabele is en geen blok
- Het verschil tussen snelheid en positie — de kern van alle spelfysica
- Botsingen oplossen: uit de grond duwen tot je er net bovenop staat
- Alleen mogen springen als je echt op de grond staat
- Een eigen blok maken met parameters (Mijn Blokken)
- Levels wisselen met achtergronden en een signaal
- Een lijst gebruiken om meerdere scores te bewaren
Wat heb je nodig?
- Een nieuw, leeg Scratch-project — en ongeveer twee uur rust
- Een sprite als Speler, bijvoorbeeld Cat, Avery Walking of Gobo
- Een lege sprite die je zelf tekent: Grond
- De sprite Ball of Button2 als Munt
- De sprite Door (of Arch) als Deur
- Twee geluidjes, bijvoorbeeld Coin en Boing
Alles uit opdracht 1 tot 9 komt hier samen. Twijfel je over klonen? Kijk nog eens naar opdracht 9.
Stap voor stap
Dit is de langste opdracht van de gids, en de enige regel die echt telt is: test na elke stap. Een platformspel dat je in één keer in elkaar zet, werkt nooit — en dan weet je niet waar het misgaat. Boven elk script staat bij welke sprite het hoort. Vink een stap af als hij klaar is; je browser onthoudt dat.
Zet je vier sprites klaar
UiterlijkVoeg vier sprites toe en geef ze meteen een nette naam: Speler, Grond, Munt en Deur. De sprite Grond maak je met de knop Teken (het penseeltje in het sprite-menu): je begint dus met een lege tekening.
- Ik heb vier sprites met de juiste namen
Teken je level: grond, platforms en een gat
UiterlijkKlik de sprite Grond aan en ga naar het tabblad Uiterlijken. Zet linksonder de tekenmodus op Bitmap en teken met de rechthoek (gevuld):
- Een brede balk helemaal onderaan — dat is je vloer. Laat er in het midden een gat van ongeveer 80 pixels in.
- Twee of drie kleinere balken erboven, als zwevende platforms. Zorg dat ze te bereiken zijn met een sprong van ongeveer 100 pixels hoog.
Noem dit uiterlijk level1. Sleep daarna de sprite op het speelveld precies op zijn plaats, en zet in het codegebied dit korte startscript.
Sprite: Grond
- Mijn level staat op het scherm: een vloer met een gat en enkele platforms
Zet de speler klaar
BewegingKlik de sprite Speler aan. Maak hem klein (een grote sprite past niet tussen je platforms), zet de draaistijl op links-rechts en plaats hem linksboven, in de lucht. Ja, in de lucht — je wil hem zo meteen zien vallen.
Sprite: Speler
- Mijn speler staat klein en linksboven in de lucht
Maak de variabele snelheidY
VariabelenMaak één variabele: snelheidY, voor alle sprites. Zet ze bij de start op 0. Vink het vakje ernaast even aan zodat je de waarde op je speelveld ziet — je gaat er de komende stappen constant naar kijken.
Sprite: Speler
- De variabele snelheidY staat op mijn speelveld en begint op 0
Zwaartekracht: twee blokken, meer niet
BesturingSleep een herhaal voortdurend onder je startblokken en zet er precies twee blokken in. Eerst wordt de snelheid één lager, daarna verplaats je de speler met die snelheid. Deze volgorde is belangrijk.
Sprite: Speler
- Mijn speler valt, en steeds sneller
Testmoment — hij valt dwars door de grond (dat hoort nu nog)
controleKlik op de vlag. Je speler valt, versnelt, en verdwijnt gewoon door de vloer naar beneden tot hij onderaan blijft plakken. Dat is geen fout — dat hoort zo. Je hebt zwaartekracht gebouwd, maar nog geen grond. Controleer voor je verder gaat:
- Valt hij steeds sneller? Kijk naar de teller: -1, -2, -3, -4 ... Blijft het getal op -1 staan, dan zit "verander snelheidY met -1" buiten de lus.
- Valt hij helemaal niet? Kijk of "verander y met snelheidY" écht het ronde oranje blokje bevat en niet het getal 0.
- Gaat hij omhoog? Dan staat er +1 in plaats van -1. Naar beneden is negatief.
- Springt hij meteen naar de onderrand? Dat is normaal: hij valt zo snel dat je het niet ziet. Zet -1 tijdelijk op -0.3 om het in slow motion te bekijken.
- Mijn speler valt versnellend door de grond heen
Landen: stop met vallen als je de grond raakt
WaarnemingZet onder je twee zwaartekrachtblokken — nog steeds in de lus — een als-blok dat vraagt of je de Grond raakt. Zo ja: zet de snelheid op 0.
Sprite: Speler
- Mijn speler zakt niet meer door de vloer, maar zit er half in
Duw hem uit de grond tot hij er net bovenop staat
BesturingZet in het als-blok, vóór "maak snelheidY 0", een herhaal tot-lus met de operator niet uit Operatoren. Zolang je nog in de grond zit, ga je één pixel omhoog.
Sprite: Speler
- Mijn speler staat netjes bovenop de vloer
Testmoment — blijft hij rustig staan?
controleKlik op de vlag en kijk tien seconden naar je speler zonder iets te doen. Hij hoort roerloos op de vloer te staan, met snelheidY die tussen 0 en -1 flikkert. Klopt dat niet?
- Hij trilt hevig op en neer? Dan staat "maak snelheidY 0" buiten het als-blok, of de herhaal-tot-lus duwt te ver (controleer dat er "verander y met 1" staat en niet 10).
- Hij zakt langzaam weg? "maak snelheidY 0" ontbreekt of staat op een verkeerde plek.
- Het spel bevriest volledig? Berucht: je speler is helemaal in de grond terechtgekomen op een plek waar hij nooit meer los raakt, of "raakt Grond?" is per ongeluk "raakt Speler?". Klik op stop, sleep je speler met de muis naar boven en probeer opnieuw.
- Hij staat een paar pixels boven de grond te zweven? Dat hoort erbij en is precies wat je wil — onthou dat goed, want in stap 11 blijkt het belangrijk.
- Test ook of hij op een hoger platform blijft staan: sleep hem er met je muis boven terwijl het spel loopt.
- Mijn speler staat stabiel op de vloer én op de platforms
Springen — de eerste poging
OperatorenSpringen is verrassend simpel: je zet snelheidY in één klap op een groot positief getal, en de zwaartekracht die je al gebouwd hebt doet de rest. Maar je mag alleen springen als je op de grond staat — anders vlieg je. Sleep de operator en uit Operatoren en vul de twee zeshoekjes.
Sprite: Speler — onderaan in de lus
- Het spring-blok staat onderaan in mijn lus
Testmoment — je springt niet. Zoek zelf uit waarom
controleKlik op de vlag en druk op het pijltje omhoog. Er gebeurt niets, of hooguit heel af en toe een sprongetje. Toch is je blok logisch juist. Denk eerst zelf na voor je verder leest — het antwoord staat in stap 9.
- Kijk naar je speler terwijl hij "stilstaat". Raakt hij de grond op dát moment?
- Denk terug aan stap 8: de herhaal-tot-lus duwt hem omhoog tot hij de grond net niet meer raakt. Precies dáár eindigt elke ronde van je lus.
- Dus op het moment dat jouw als-blok vraagt "raakt Grond?", is het antwoord bijna altijd nee — je zweeft één pixel boven de vloer.
- Dit is geen tikfout in je script, maar een denkfout in de volgorde. Zulke bugs zijn de moeilijkste én de leerzaamste die er bestaan.
Kon je het zelf vinden? Petje af. Kon je het niet? Ook prima — profs zoeken hier soms een halve dag naar. In de volgende stap los je het op.
- Ik snap waarom "raakt Grond?" hier bijna altijd nee zegt
De tenen-truc: even naar beneden voelen
BewegingDe oplossing is even simpel als slim: zak vlak vóór de vraag twee pixels, stel je vraag, en ga daarna weer twee pixels omhoog. Je voelt met je tenen of er grond onder je zit. Zet dus één blok vóór en één blok ná je als-blok.
Sprite: Speler — het springgedeelte, compleet
- Ik spring, en alleen als ik op de grond sta
Links en rechts lopen
BewegingHorizontaal bewegen staat helemaal los van je zwaartekracht: geen snelheid, geen versnelling, gewoon x veranderen zolang je een toets indrukt. Zet deze twee als-blokken onderaan in dezelfde lus. Met "richt naar ... graden" draait je sprite meteen de goede kant op.
Sprite: Speler — onderaan in de lus
- Ik loop naar links en rechts en kijk de goede kant op
Muren die je tegenhouden
WaarnemingLoop je nu tegen de zijkant van een platform, dan stap je er dwars doorheen. De oplossing is verbluffend eenvoudig: doe de stap ongedaan als je na het bewegen in de grond staat. Zet dus in elk van je twee loop-blokken een extra als-blok.
Sprite: Speler
- Ik loop niet meer door platforms heen
Testmoment — voelt het als een echt platformspel?
controleDit is het grote moment. Loop je level rond, spring op elk platform, loop tegen elke muur. Neem hier rustig vijf minuten voor. Controleer:
- Kan je vanaf de vloer op je laagste platform springen? Zo niet: sprongkracht van 14 naar 17, of je platform lager tekenen.
- Kan je in de lucht nog eens springen? Dan mist de tenen-truc, of je "en"-operator zit niet goed in elkaar (kijk of het echt één zeshoekje mét twee zeshoekjes erin is).
- Blijf je haken aan de rand van een platform? Normaal bij bitmap-tekeningen met rafelige randen. Teken je balken opnieuw met de rechthoek, of maak je speler iets kleiner.
- Loop je door een muur heen als je heel snel drukt? Verlaag je loopsnelheid van 5 naar 4.
- Schiet je door het plafond van een platform als je eronder springt? Bekende beperking van deze eenvoudige aanpak: de uitduw-lus duwt altijd omhoog. Zorg dat je platforms dun zijn, of leef ermee — bij veel schoolprojecten is dit prima.
- Val je door het gat in je vloer? Ja? Perfect, dat lossen we in de volgende stap op.
- Lopen, springen en landen voelen goed aan
In het gat gevallen? Terug naar de start
BesturingZet onderaan in je lus een als-blok dat kijkt of je onder het scherm gezakt bent. Zo ja: terug naar het begin, snelheid weer op 0, en vijf punten aftrek. Maak eerst nog de variabele score (voor alle sprites) en zet die bij de start op 0.
Sprite: Speler — onderaan in de lus
- Val ik in het gat, dan sta ik weer bij de start
Maak je eigen blok: "reset speler" met twee parameters
Mijn BlokkenJe hebt nu op drie plekken bijna dezelfde blokken nodig: bij de start, bij het gat, en straks bij level 2. Tijd voor een eigen blok. Klik links onderaan op de roze categorie Mijn Blokken en dan op Maak een blok. Typ als naam reset speler, klik twee keer op Voeg invoer toe (getal of tekst) en noem ze startX en startY. Klik op OK.
Sprite: Speler — de definitie, een los script
- Mijn roze blok "reset speler" bestaat en heeft twee invoervakjes
Gebruik "reset speler" overal
Mijn BlokkenJe nieuwe roze blok staat nu onderaan in het palet van Mijn Blokken. Vervang er je losse blokken mee: één keer bij de start, één keer in het gat-blok.
Sprite: Speler — de startblokken
Sprite: Speler — in het gat-blok
- Overal waar ik mijn speler terugzet, gebruik ik nu mijn eigen blok
Testmoment — spring bewust in het gat
controleKlik op de vlag, loop naar het gat en spring erin. Je hoort meteen weer linksboven te verschijnen, rustig te vallen en netjes te landen — en je score staat op -5. Doe dat drie keer na elkaar. Klopt er iets niet?
- Je schiet na het terugzetten meteen weer door de vloer? Je definitie mist "maak snelheidY 0".
- Je blijft eeuwig onder het scherm hangen? De grens -170 is te laag voor jouw level. Probeer -160. Onthou: het speelveld eindigt op -180.
- Je score gaat met -10 of -25 tegelijk omlaag? Je zakt meerdere rondes lang onder -170 voor je teruggezet wordt. Zet "reset speler" als eerste blok in het als-blok.
- Je roze blok doet niets? Kijk of de definitie een los script is met het hoedblok "definieer reset speler" erboven, en of je de parameters echt vanuit het hoedblok naar binnen gesleept hebt (niet zelf de getallen ingetypt).
- Vallen en herstarten werkt betrouwbaar
Munten plaatsen met klonen
BesturingKlik de sprite Munt aan. Maak eerst nog de variabele munten. Verberg het origineel, en maak dan met een herhaal 5 keer-lus vijf klonen op een rij, telkens 80 pixels verder. Zo teken je met code een rij munten in plaats van ze één voor één te slepen.
Sprite: Munt
- Er liggen vijf munten in een rij in mijn level
Een munt oprapen
VariabelenZet een tweede, los script bij de Munt met het hoedblok wanneer ik als kloon start. Elke munt-kloon doet precies één ding: wachten tot de speler hem aanraakt, punten geven en zichzelf opruimen.
Sprite: Munt — een tweede, los script
- Munten verdwijnen als ik ze aanraak en geven punten
Testmoment — verzamel alle vijf de munten
controleKlik op de vlag en raap alle munten op. Je score hoort op 50 te staan en de teller "munten" op 5. Klopt het niet?
- Je ziet geen munten? Staat "toon" in het kloon-script? Het origineel is verborgen, dus elke kloon moet zichzelf tonen.
- Je ziet één munt die niet verdwijnt? Dat is het origineel — je bent "verberg" vergeten.
- Eén munt geeft 20 of 30 punten? Je raakt hem meerdere beeldjes lang aan. Controleer dat "verwijder deze kloon" er echt onder staat.
- De munten zweven in de lucht of zitten in een platform? Pas de start-x en start-y in stap 20 aan tot ze mooi liggen. Dit is gewoon puzzelen met getallen.
- Je score gaat naar -5 terwijl je niet in het gat valt? Je speler raakt de onderrand omdat de grens -170 te hoog ligt voor jouw level. Zet hem op -175.
- Alle vijf de munten geven samen 50 punten
De deur gaat pas open als alle munten weg zijn
GebeurtenissenKlik de sprite Deur aan. Bij de start staat hij op zijn plek maar is hij onzichtbaar. Zodra het signaal deur open binnenkomt, verschijnt hij.
Sprite: Deur
- Mijn deur staat op zijn plek en is bij de start onzichtbaar
Door de deur: level 2 of gewonnen
GebeurtenissenZet een tweede script bij de Deur. Hij verschijnt, wacht tot jij hem aanraakt, en kijkt dan naar de variabele level: sta je in level 1, dan stuurt hij je door; sta je in level 2, dan heb je gewonnen. Maak allebei de berichten aan in het dropdownlijstje.
Sprite: Deur — een tweede, los script
- De deur stuurt me door naar level 2
Level 2: iedereen reageert op het signaal
UiterlijkNu bouw je je tweede level. Teken bij de sprite Grond een tweede uiterlijk met een andere indeling en noem het level2 (tip: klik met de rechtermuisknop op level1 en kies "dupliceren", dan hoef je alleen balken te verschuiven). Kies bij de Achtergronden twee achtergronden, bijvoorbeeld Blue Sky en Woods. Geef daarna elke sprite een klein script dat naar het signaal level 2 luistert.
Achtergrond — twee scripts
Sprite: Grond · Sprite: Speler — elk een extra script
Sprite: Munt — een derde script, met een nieuwe rij munten
- Level 2 heeft een andere achtergrond, andere platforms en nieuwe munten
Maak de lijst "hoogscores"
LijstenGa naar Variabelen en klik onderaan op Maak een lijst. Noem ze hoogscores, voor alle sprites. Er verschijnt een leeg kader op je speelveld. Dit zijn de belangrijkste lijstblokken:
- De lijst hoogscores staat op mijn speelveld
Je score in de lijst zetten als het spel eindigt
LijstenZet bij de Speler een laatste, los script dat luistert naar het signaal gewonnen. Het voegt je score toe aan de lijst, feliciteert je en stopt het spel. Precies hetzelfde script zou je ook onder een "game over"-signaal kunnen hangen — een lijst maakt geen verschil tussen winnen en verliezen, hij bewaart gewoon getallen.
Sprite: Speler — een los script
- Na het uitspelen verschijnt mijn score in de lijst
Eindtest — speel je platformspel helemaal uit
controleDit is de laatste test van de hele gids. Speel je spel van begin tot einde uit, twee keer na elkaar, zonder de code aan te raken. Loop deze eindcontrole af:
- Begint ronde twee echt met score 0, level 1, munten 0, de eerste achtergrond én het uiterlijk level1 van je Grond? Vergeet vooral dat laatste niet — dat is de meest vergeten reset van allemaal.
- Staat er na twee potjes ook echt twee keer een score in je lijst?
- Speel drie minuten aan één stuk door. Wordt het traag? Dan blijft er ergens een munt-kloon hangen: controleer of je kloon-script eindigt op "verwijder deze kloon".
- Kan je op elk platform van level 2 geraken? Test elke sprong afzonderlijk, ook de moeilijkste.
- Kan je vals spelen? Probeer het bewust: in de lucht dubbel springen, door een muur wringen, de deur bereiken zonder munten. Vind je een gaatje, dan weet je meteen welk als-blok je moet aanscherpen.
- Klik op het volledige-scherm-knopje en laat iemand anders spelen zonder één woord uitleg. Snapt hij binnen tien seconden wat de bedoeling is? Dan is je spel af.
- Mijn opdracht 10 is af — twee levels, munten, deur en hoogscorelijst
Het volledige script
Zo ziet je afgewerkte eindproject eruit. Het zijn tien scripts, verdeeld over vier sprites en de achtergrond. Vergelijk vooral de grote lus van je Speler blok voor blok — de volgorde daarin is alles.
Sprite: Speler — het hoofdscript
Sprite: Speler — de definitie van je eigen blok · het level-2-script · het eindscript
Sprite: Grond — twee scripts
Sprite: Munt — drie scripts
Sprite: Deur — twee scripts · Achtergrond — twee scripts
Uitdagingen
Dit is de laatste opdracht van de gids — en dus ook je laatste kans om zelf iets uit te zoeken zonder uitgewerkte oplossing. Alle blokken die je nodig hebt, ken je nu.
Een bewegend platform
makkelijkMaak een extra sprite "Lift" die traag heen en weer schuift, en waar je op kan staan. Tip: laat de speler ook "raakt Lift?" controleren, of — veel eenvoudiger — teken de lift in dezelfde sprite-familie als je Grond door hem een tweede uiterlijk te geven. Extra pittig: zorg dat je speler meebeweegt als hij erop staat.
Een vijand die heen en weer patrouilleert
middelVoeg een vijand toe die over een platform loopt. Raak jij hem, dan verlies je tien punten en word je teruggezet met je eigen blok "reset speler". Tip: je hebt geen nieuwe blokken nodig — alleen "keer om aan de rand" of een als-blok dat de x-positie in de gaten houdt. Extra pittig: laat je hem verdwijnen als je er van bovenaf op springt (kijk dan naar snelheidY: die is dan negatief).
Een echte hoogscoretabel
pittigVraag met "vraag ... en wacht" om de naam van de speler en zet naam én score samen in de lijst met het blok samenvoegen uit Operatoren. Zorg daarna dat er nooit meer dan vijf regels in staan: is de lijst langer, verwijder dan de laagste. Tip: je hebt "lengte van hoogscores", een herhaal-lus en het blok "item ... van hoogscores" nodig. Dit is de moeilijkste uitdaging van de hele gids — als je dit kan, kan je alles wat Scratch te bieden heeft.