6.3 Animaties met async play.repeat_forever
Nu je weet hoe async en await werken, kun je ook eenvoudig animaties maken! Met @play.repeat_forever in combinatie met async kun je code steeds opnieuw laten uitvoeren.
6.3.1 Kleur laten veranderen
import play
bal = play.new_circle(color='red')
@play.repeat_forever
async def verander_kleur():
bal.color = 'orange'
await play.timer(seconds=0.5)
bal.color = 'yellow'
await play.timer(seconds=0.5)
bal.color = 'green'
await play.timer(seconds=0.5)
bal.color = 'blue'
await play.timer(seconds=0.5)
bal.color = 'purple'
await play.timer(seconds=0.5)
bal.color = 'red'
await play.timer(seconds=0.5)
play.start_program()
De bal verandert nu steeds van kleur: rood → oranje → geel → groen → blauw → paars → rood, enzovoort!
Hoe werkt dit?
@play.repeat_forever
async def verander_kleur():
Deze functie wordt steeds opnieuw uitgevoerd, totdat het programma stopt. Door async ervoor te zetten kan de functie wachten zonder het hele spel te pauzeren.
bal.color = 'orange'
We veranderen de kleur van de bal naar oranje door simpelweg een nieuwe waarde toe te wijzen.
await play.timer(seconds=0.5)
We wachten 0.5 seconden voordat we de volgende kleur instellen. Dit blijft maar herhalen!
6.3.2 Opdracht: Wissel tussen animaties
Maak een programma waarbij je met de pijltjestoetsen kunt wisselen tussen twee verschillende animaties.
- Druk op de linker pijltjestoets → de bal verandert van kleur
- Druk op de rechter pijltjestoets → de bal wordt groter en kleiner
Stappenplan:
- Maak een global variabele
animatiemet de waarde'kleur' - Maak een functie met
@play.when_key_pressed('left')dieanimatienaar'kleur'zet - Maak een functie met
@play.when_key_pressed('right')dieanimatienaar'grootte'zet - Maak een
@play.repeat_foreverasync functie die:- Met een
if animatie == 'kleur':controleert of de kleuranimatie moet draaien - Met een
if animatie == 'grootte':controleert of de grootteanimatie moet draaien
- Met een
Klik hier voor de oplossing
import play
bal = play.new_circle(color='red', radius=50)
animatie = 'kleur'
@play.when_key_pressed('left')
def kies_kleur():
global animatie
animatie = 'kleur'
@play.when_key_pressed('right')
def kies_grootte():
global animatie
animatie = 'grootte'
@play.repeat_forever
async def animeer():
if animatie == 'kleur':
bal.color = 'orange'
await play.timer(seconds=0.5)
bal.color = 'yellow'
await play.timer(seconds=0.5)
bal.color = 'green'
await play.timer(seconds=0.5)
bal.color = 'blue'
await play.timer(seconds=0.5)
bal.color = 'red'
await play.timer(seconds=0.5)
if animatie == 'grootte':
bal.radius = 60
await play.timer(seconds=0.3)
bal.radius = 70
await play.timer(seconds=0.3)
bal.radius = 60
await play.timer(seconds=0.3)
bal.radius = 50
await play.timer(seconds=0.3)
play.start_program()