10.6 Tekst die verandert
De voorbeelden in dit hoofdstuk draaien niet in de online speeltuin. Een pygame-ce-programma schrijft zijn eigen game-loop, en die is in de browser niet meer te stoppen. Draai ze op je eigen computer, in Thonny of VS Code — zie installatie.
In de vorige les heb je geleerd hoe je tekst op het scherm toont. Maar wat als de tekst moet veranderen, bijvoorbeeld een score die omhoog gaat?
KEYDOWN: reageren op een toetsdruk
In les 10.4 gebruikten we pygame.key.get_pressed() om continu te checken of een toets ingedrukt is. Maar soms wil je dat iets één keer gebeurt per toetsdruk. Hiervoor gebruik je pygame.KEYDOWN in de event loop:
for event in pygame.event.get():
if event.type == pygame.QUIT:
actief = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print("Spatie ingedrukt!")
Het verschil: pygame.key.get_pressed() checkt continu of een toets ingedrukt is (handig voor beweging). pygame.KEYDOWN detecteert het moment dat een toets wordt ingedrukt (handig voor een score verhogen).
Een score bijhouden
Je kunt tekst elke frame opnieuw renderen met een variabele:
import pygame
pygame.init()
scherm = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
font = pygame.font.SysFont("arial", 40)
score = 0
actief = True
while actief:
for event in pygame.event.get():
if event.type == pygame.QUIT:
actief = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
score = score + 1
scherm.fill((30, 30, 30))
tekst = font.render("Score: " + str(score), True, (255, 255, 255))
scherm.blit(tekst, (300, 280))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Elke keer dat je op spatie drukt, gaat de score omhoog. De tekst wordt elk frame opnieuw getekend met de nieuwe waarde van score.
Opdracht 10.6.a: Scoreteller
Maak een programma waarbij:
- Een score begint op 0
- Met
pijltje omhooggaat de score omhoog - Met
pijltje omlaaggaat de score omlaag - De score wordt op het scherm getoond
Klik hier voor een tip.
De score verandert, dus je moet de tekst elk frame opnieuw maken met font.render(...). Reageren op de pijltjes doe je in de event-lus, met event.type == pygame.KEYDOWN.
Klik hier voor de oplossing.
import pygame
pygame.init()
scherm = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
font = pygame.font.SysFont("arial", 50)
score = 0
actief = True
while actief:
for event in pygame.event.get():
if event.type == pygame.QUIT:
actief = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
score = score + 1
if event.key == pygame.K_DOWN:
score = score - 1
scherm.fill((30, 30, 30))
tekst = font.render("Score: " + str(score), True, (255, 255, 255))
scherm.blit(tekst, (300, 280))
pygame.display.flip()
clock.tick(60)
pygame.quit()