2 · Bestuur je sprite

Je maakt je sprite bestuurbaar met de pijltjestoetsen. Eerst op de manier die iedereen als eerste bedenkt: vier losse scripts. Die werkt, maar hij hapert. Daarna bouw je dezelfde besturing opnieuw, met één script en een lus — en dan glijdt je sprite ineens vloeiend over het scherm. Precies dat verschil is de kern van deze opdracht: twee oplossingen die hetzelfde doen, maar niet even goed voelen.

★☆☆ makkelijk 8 stappen ongeveer 30 minuten

Wat leer je?

  • Meer dan één script tegelijk laten draaien op dezelfde sprite
  • Het verschil tussen reageren op een toets en een toets voortdurend uitlezen
  • Werken met de lus herhaal voortdurend uit Besturing
  • Een zeshoekig vraagblok gebruiken: "toets ... ingedrukt?"
  • Je sprite netjes binnen het speelveld houden met een vergelijking

Wat heb je nodig?

  • Een nieuw, leeg Scratch-project
  • Eén sprite — de kat mag, maar kies gerust iets anders
  • Een toetsenbord met vier pijltjestoetsen

Weet je nog niet hoe je blokken vastklikt? Doe eerst opdracht 1.

Stap voor stap

Je bouwt deze opdracht twee keer: eerst de voor de hand liggende manier, daarna de betere. Sla de eerste versie niet over — je moet het haperen zélf voelen om te snappen waarom de tweede versie beter is. Vink een stap af als hij klaar is; je browser onthoudt dat.

1

Eén toets, één script

Gebeurtenissen

Klik op de gele categorie Gebeurtenissen en sleep het blok "als spatie toets wordt ingedrukt" naar je codegebied. Klik op het donkere vakje en kies in de lijst pijl naar rechts. Hang er daarna uit Beweging het blok "verander x met 10" onder.

als pijl naar rechts toets wordt ingedrukt
verander x met 10
Waarom "verander x" en niet "beweeg"? "beweeg 10 stappen" gaat altijd de kant op waar je sprite naar kijkt. Met "verander x met 10" zeg je keihard: tien stappen naar rechts, wat de sprite ook doet. Voor een besturing met vier richtingen is dat veel voorspelbaarder. Onthoud: x is links–rechts, y is onder–boven.
  • Mijn sprite schuift naar rechts als ik op de pijltjestoets druk
2

Nog drie losse scripts erbij

Gebeurtenissen

Bouw hetzelfde nog drie keer, elk keer met een andere toets en een ander getal. Sneller dan opnieuw slepen: klik met de rechtermuisknop op je hoedblok en kies dupliceren — je krijgt een kopie van het hele script die aan je muis hangt. Zet de kopieën netjes naast elkaar in het codegebied, zodat je ze allemaal ziet.

als pijl naar links toets wordt ingedrukt
verander x met -10
als pijl naar boven toets wordt ingedrukt
verander y met 10
als pijl naar onder toets wordt ingedrukt
verander y met -10
Let op het minteken. Naar links is niet "verander x met 10 de andere kant op", maar "verander x met -10". Naar beneden is "verander y met -10". Een negatief getal betekent gewoon: de andere richting.
  • Ik heb vier losse scripts, elk met een eigen pijltjestoets

Testmoment — voel het haperen

controle

Klik één keer in het speelveld en houd daarna een pijltjestoets ingedrukt. Let goed op: je sprite doet één stapje, staat dan een halve seconde stil, en gaat pas daarna vlot door. Precies dat schokje ga je straks wegwerken. Werkt er iets helemaal niet?

  • Zit het bewegingsblok wel écht vastgeklikt onder het hoedblok? Sleep het hoedblok een stukje opzij — het blok eronder hoort mee te komen.
  • Staat in elk hoedblok een andere toets? Twee scripts met dezelfde toets vechten met elkaar.
  • Klik eerst met je muis in het speelveld. Staat je cursor nog in een tekstvakje van een blok, dan gaan je toetsaanslagen daarheen in plaats van naar het spel.
  • Sta je nog op de juiste sprite? Elke sprite heeft zijn eigen codegebied.
  • Ik kan sturen, maar ik merk het schokje bij het begin
4

Bouw de betere motor: een eeuwige lus

Besturing

Laat je vier scripts even staan en bouw er naast een nieuw script. Neem uit Gebeurtenissen het groene-vlag-hoedblok, en klik daaronder uit de oranje categorie Besturing het blok "herhaal voortdurend". Dat is een C-blok: het heeft een mond waar andere blokken in passen, en het heeft géén nokje onderaan — er kan niets achter komen, want de lus stopt nooit uit zichzelf.

als wordt aangeklikt
herhaal voortdurend
Wat doet die lus? Alles wat in de mond zit, wordt ongeveer 30 keer per seconde opnieuw uitgevoerd, zolang het project draait. Dat is de motor van bijna elk spel dat je ooit zult maken.
  • Mijn lege lus hangt onder het groene-vlag-blok
5

Vraag zelf aan de toetsen of ze ingedrukt zijn

Waarneming

Sleep uit Besturing vier keer een "als ... dan"-blok in de mond van je lus, onder elkaar. Ga daarna naar de lichtblauwe categorie Waarneming en sleep het zeshoekige blok "toets spatie ingedrukt?" in het zeshoekige gaatje van elk als-blok. Kies per blok de juiste pijltjestoets en zet in elke mond het bijbehorende bewegingsblok.

als wordt aangeklikt
herhaal voortdurend
als toets pijl naar rechts ingedrukt? dan
verander x met 10
als toets pijl naar links ingedrukt? dan
verander x met -10
als toets pijl naar boven ingedrukt? dan
verander y met 10
als toets pijl naar onder ingedrukt? dan
verander y met -10
Zeshoek = vraag. Een zeshoekig blok geeft geen tekst of getal terug, maar alleen ja of nee. Daarom past het precies in het zeshoekige gaatje van "als ... dan". Zo'n vraagblok werkt nooit alleen — het hoort altijd ergens ín.
  • Vier als-blokken zitten in mijn lus, elk met een eigen toets

Testmoment — vergelijk de twee manieren

controle

Klik op de groene vlag en houd een pijltjestoets ingedrukt. Je sprite glijdt nu meteen weg, zonder schokje. Probeer ook eens twee toetsen tegelijk (rechts én omhoog): je gaat schuin. Met de vier losse scripts lukte dat veel slechter.

  • Gebeurt er niets? Dan draait je lus waarschijnlijk niet: je moet nu écht op de groene vlag klikken, één keer indrukken van een toets start dit script niet.
  • Beweegt je sprite twee keer zo snel? Dan zijn je oude scripts ook nog actief — die ruim je in de volgende stap op.
  • Zit elk bewegingsblok wel binnen de mond van zijn als-blok, en niet eronder? Kijk goed of het blok ingesprongen staat.
  • Staat er in twee als-blokken per ongeluk dezelfde toets? Controleer alle vier de lijstjes.
  • Mijn sprite beweegt vloeiend en kan ook schuin
7

Ruim de oude scripts op en regel je snelheid

Beweging

Sleep nu je vier oude scripts één voor één naar het blokkenpalet aan de linkerkant en laat ze daar los — weg zijn ze. (Per ongeluk verwijderd? Ctrl + Z zet het terug.) Verander daarna het getal in je vier bewegingsblokken en test telkens even: met 4 sluipt je sprite, met 7 voelt het rustig maar wendbaar, met 20 schiet hij door het beeld.

verander x met 7
Waarom voelt de lus vloeiender? Bij het hoedblok "als toets wordt ingedrukt" bepaalt niet Scratch, maar je toetsenbord het tempo. Dat werkt zoals in een tekstverwerker: je krijgt één teken, dan een pauze van ongeveer een halve seconde, en pas dan de herhaling. Die toetsherhalingsvertraging is precies het schokje dat je voelde. Je lus vraagt zélf dertig keer per seconde "is die toets nu ingedrukt?" — geen wachten, geen pauze, en meerdere toetsen tegelijk werken gewoon.
  • De oude scripts zijn weg en mijn snelheid voelt goed
8

Houd je sprite binnen het speelveld

Operatoren

Stuur eens ver naar rechts: je sprite blijft half aan de rand plakken. Dat lossen we op met een grenswacht. Het speelveld loopt van x = -240 tot x = 240, dus we houden hem op 230. Voeg onderaan je lus twee als-blokken toe. In het zeshoekige gaatje komt uit de groene categorie Operatoren het blok "... groter dan ..." (en één keer "... kleiner dan ..."). In het linkervakje sleep je uit Beweging het ronde blokje x-positie.

als x-positie > 230 dan
maak x-positie 230
als x-positie < -230 dan
maak x-positie -230
Hoe lees je dit? "Is x-positie groter dan 230? Zet hem dan terug op 230." Omdat dit ook in de eeuwige lus zit, wordt die vraag dertig keer per seconde gesteld. Je sprite kan dus geen moment ontsnappen — hij lijkt gewoon tegen een onzichtbare muur te botsen. Het ronde blokje x-positie is een reporter: het geeft een getal terug, en past daarom alleen in een vakje van een ander blok.
  • Mijn sprite blijft links en rechts netjes in beeld

Het volledige script

Eén hoedblok, één lus, zes vragen. Vergelijk het rustig met wat er op jouw scherm staat — let vooral op wat er ín een mond zit en wat eronder hangt.

als wordt aangeklikt
herhaal voortdurend
als toets pijl naar rechts ingedrukt? dan
verander x met 7
als toets pijl naar links ingedrukt? dan
verander x met -7
als toets pijl naar boven ingedrukt? dan
verander y met 7
als toets pijl naar onder ingedrukt? dan
verander y met -7
als x-positie > 230 dan
maak x-positie 230
als x-positie < -230 dan
maak x-positie -230
De klassieke beginnersfout Bijna iedereen zet de vier als-blokken wél netjes onder elkaar, maar naast de lus in plaats van erin. Je script start dan, controleert precies één keer of er een toets ingedrukt is, en stopt. Resultaat: je klikt op de vlag, er gebeurt niets, en je denkt dat je blokken fout zijn. Sleep het bovenste als-blok altijd tot je de mond van "herhaal voortdurend" ziet openklappen, en laat het pas dan los. Twijfel je? Sleep het hoedblok een stukje opzij: alles wat er echt bij hoort, komt mee.

Uitdagingen

Klaar en nog tijd over? Deze drie uitdagingen hebben géén uitgewerkte oplossing — zoek zelf uit hoe je ze oplost. Alle blokken die je nodig hebt, ken je nu.

A

Ook boven en onder een muur

makkelijk

Je grenswacht bewaakt alleen links en rechts. Bouw hem ook voor boven en onder. Tip: het speelveld is minder hoog dan breed — met welke getallen werk je dan, en welk rond blokje heb je nodig in plaats van x-positie?

B

Sprinten met de spatiebalk

middel

Laat je sprite twee keer zo snel gaan zolang je de spatiebalk ingedrukt houdt. Tip: je hebt een extra vraagblok nodig, en in Operatoren staat een blok "... en ..." waarmee je twee vragen tegelijk kunt stellen. Lukt dat niet? Dan mag je ook een als-blok ín een ander als-blok stoppen.

C

Kijken waar je heen gaat

pittig

Laat je sprite ook echt draaien naar de richting waarin hij loopt. Tip: in Beweging staat "wijs in richting ..." — rechts is 90, links is -90, omhoog is 0 en omlaag is 180. Staat je sprite ineens op zijn kop? Zoek dan het blok "maak draaistijl ..." op en probeer de stand links-rechts.

1 · De pratende kat 3 · De eeuwige stuiterbal