Ga naar hoofdinhoud

4.1 Gebeurtenissen

Hier bouw je op verder: Functies

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

"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 de oplossing.

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...

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.b: Vloeiende besturing​

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

Klik hier voor een tip.

while_key_pressed gaat af zolang je de toets ingedrukt houdt, dus je hoeft er maar een klein stapje in te zetten. Voor links en rechts heb je twee losse functies nodig.

Klik hier voor de oplossing.
Spel laden...

Opdracht 4.1.c: Klikken​

Een toets is niet de enige gebeurtenis waar je op kunt reageren. Er bestaat er ook een die afgaat zodra je met de muis op een vorm klikt. Zoek die op in de cheatsheet en maak een programma waarin een cirkel van kleur verandert als je erop klikt.

Spel laden...
Klik hier voor een tip.

Zoek in de cheatsheet onder Gebeurtenissen. De decorator die je zoekt zet je niet op play maar op je eigen vorm, dus hij begint met de naam van je variabele.

Klik hier voor de oplossing.
import play

cirkel = play.new_circle(color='blue', radius=60)

@cirkel.when_clicked
def verander_kleur():
cirkel.color = 'orange'
Spel laden...