4.1 Gebeurtenissen
Hier bouw je op verder: Functies
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
- Python Functies
"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.
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 + 10verandert inblok.x = blok.x + 100?
Klik hier voor het antwoord.
- Met
"a"reageert de rechthoek op de letter A in plaats van de spatiebalk. - Met
+ 100maakt de rechthoek veel grotere sprongen naar rechts.
Opdracht 4.1.a: Ook links en rechts
a) Voer het onderstaand code fragment uit. Wat gebeurt er als je op pijltje omhoog drukt?
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.
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.
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:
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.
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.
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.
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'