Ga naar hoofdinhoud

4.1 Gebeurtenissen

"Als ik op de spatiebalk druk, wil ik dat er iets beweegt. Kan dat?" Jazeker. Met play kun je reageren op acties van de gebruiker. Zo'n actie noemen we een gebeurtenis.

Spel laden...

Wat gebeurt hier allemaal?

@play.when_key_pressed("space")
def spatie_ingedrukt():
...

Dit is de gebeurtenis. De gebeurtenis heet dus when_key_pressed. We moeten de gebeurtenis wel vertellen bij welke toets we iets willen doen, in dit geval space wat natuurlijk staat voor spatie.

def spatie_ingedrukt():
blok.x = blok.x + 10

Direct onder de gebeurtenis plaatsen we een functie spatie_ingedrukt. Deze functie wordt uitgevoerd zodra de gebeurtenis gebeurt, in dit geval het indrukken van de spatiebalk.

Onderzoek

Probeer eens de volgende aanpassingen:

  • Wat gebeurt er als je "space" verandert in "a"?
  • Wat als je blok.x = blok.x + 10 verandert in blok.x = blok.x + 100?
Klik hier voor het antwoord
  • Met "a" reageert de rechthoek op de letter A in plaats van de spatiebalk.
  • Met + 100 maakt de rechthoek veel grotere sprongen naar rechts.

a) Voer het onderstaand code fragment uit. Wat gebeurt er als je op pijltje omhoog drukt?

Spel laden...
Klik hier voor het antwoord

Als het goed is, gaat de rechthoek omhoog.

b) Pas het aan zodat als je op pijltje naar rechts klikt, de rechthoek naar rechts gaat

Klik hier voor de oplossing
Spel laden...

c) Voeg nu code toe zodat het reageert op pijltje naar links en het blok dan ook naar links beweegt

Klik hier voor de oplossing
Spel laden...

4.1.1 Zolang een toets ingedrukt is

Met @play.when_key_pressed reageer je op het moment dat een toets wordt ingedrukt — de actie gebeurt dan maar één keer. Maar soms wil je dat iets continu gebeurt zolang je een toets ingedrukt houdt, bijvoorbeeld voor vloeiende beweging. Hiervoor gebruik je @play.while_key_pressed:

Spel laden...

Het verschil? Met when_key_pressed gebeurt de actie één keer bij het indrukken. Met while_key_pressed gebeurt de actie elk frame zolang je de toets inhoudt. Dat voelt veel vloeiender.

info

Je kunt ook play.key_is_pressed() in combinatie met @play.repeat_forever gebruiken voor hetzelfde effect. Maar @play.while_key_pressed is korter en duidelijker.

Opdracht 4.1.1.a: Vloeiende besturing

Maak een cirkel die vloeiend beweegt met de pijltjestoetsen. Gebruik @play.while_key_pressed.

Klik hier voor de oplossing.
Spel laden...

Opdracht 4.1.b: Klikken

Naast when_key_pressed bestaan er nog meer gebeurtenissen. Kijk maar eens in de cheatsheet.

a) Kies één gebeurtenis uit de cheatsheet

b) voer het voorbeeld van de gekozen gebeurtenis uit via de ▶ knop in de cheatsheet

c) pas de code van het voorbeeld aan naar iets wat jij leuker vindt :)