10.1 Je eerste venster
Hier bouw je op verder: While-loop en For-loop
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
- Python While-loop
- Python For-loop
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.
Met coderius-play heb je geleerd om snel games te maken. Maar wat als je meer controle wilt? Dan kun je pygame-ce gebruiken. Dat is de bibliotheek waar coderius-play bovenop gebouwd is.
Deze sectie is een vervolg, niet een alternatief. Voor de meeste games blijft coderius-play de snelste route. Stap pas over op pygame-ce als je iets nodig hebt wat play niet biedt — bijvoorbeeld eigen pixel-tekeningen, fijne event-controle, of een vorm van game-loop die buiten play's standaard valt.
Wat is anders dan in play?
- Eigen game-loop: je schrijft zelf de
while-lus die elk frame draait. Play doet dit voor je. - Coördinatensysteem: pygame-ce zet
(0, 0)linksboven en de y-as loopt naar beneden. In play zit(0, 0)in het midden en gaat y omhoog (zoals in wiskunde). - Geen automatische physics: voor zwaartekracht en botsingen gebruik je apart de
pymunk-bibliotheek (in lessen 10.7-10.10). - Geen automatische start_program: jij bent verantwoordelijk voor het tekenen, het bijwerken van het scherm (
pygame.display.flip()) en het sluiten van het venster.
Verwacht dus iets meer regels code voor hetzelfde resultaat — in ruil krijg je meer controle.
Een venster openen
import pygame
pygame.init()
scherm = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Mijn eerste pygame-ce programma")
actief = True
while actief:
for event in pygame.event.get():
if event.type == pygame.QUIT:
actief = False
pygame.quit()
- Regel 1: Haalt pygame-ce binnen. Anders dan bij play schrijf je hier alles zelf.
- Regel 3: Start pygame op. Dit moet altijd als eerste, vóór je iets met een venster doet.
- Regel 5: Maakt het venster: 800 pixels breed, 600 hoog. De variabele
schermis het vlak waarop je straks tekent. - Regel 6: Zet de titel in de balk bovenaan het venster.
- Regel 8: Onthoudt of het programma nog moet draaien. Zet je dit op
False, dan stopt de lus hieronder. - Regel 10: De game loop. Alles wat elk frame opnieuw moet gebeuren staat hierin. Elk spel in pygame-ce heeft er een; play schreef hem tot nu toe voor je.
- Regel 11-13: Loopt de gebeurtenissen af die sinds het vorige frame binnenkwamen. Klik je op het kruisje, dan stuurt pygame
QUITen zetten weactiefopFalse. - Regel 15: Sluit pygame netjes af nadat de lus is gestopt.
Je ziet een leeg venster van 800 bij 600 pixels, met "Mijn eerste pygame-ce programma" in de titelbalk.
Er gaat iets mis?
Als je pygame.init() vergeet, krijg je een foutmelding zoals:
pygame.error: video system not initialized
De oplossing: zorg dat pygame.init() altijd de eerste regel is na import pygame.
Een andere veelgemaakte fout is de game loop vergeten. Zonder de while-loop opent het venster en sluit het meteen weer.
Opdracht 10.1.a: Venstergrootte aanpassen
Maak een venster dat:
- 400 bij 400 pixels groot is
- De titel "Mijn spel" heeft
Klik hier voor de oplossing.
import pygame
pygame.init()
scherm = pygame.display.set_mode((400, 400))
pygame.display.set_caption("Mijn spel")
actief = True
while actief:
for event in pygame.event.get():
if event.type == pygame.QUIT:
actief = False
pygame.quit()
Na het uitvoeren van deze code, zou je een leeg venster moeten zien met de titel "Mijn spel" en afmetingen van 400 bij 400 pixels.