Ga naar hoofdinhoud

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.

Online speeltuin

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.

Vervolg, geen vervanging

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()
  1. Regel 1: Haalt pygame-ce binnen. Anders dan bij play schrijf je hier alles zelf.
  2. Regel 3: Start pygame op. Dit moet altijd als eerste, vóór je iets met een venster doet.
  3. Regel 5: Maakt het venster: 800 pixels breed, 600 hoog. De variabele scherm is het vlak waarop je straks tekent.
  4. Regel 6: Zet de titel in de balk bovenaan het venster.
  5. Regel 8: Onthoudt of het programma nog moet draaien. Zet je dit op False, dan stopt de lus hieronder.
  6. 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.
  7. Regel 11-13: Loopt de gebeurtenissen af die sinds het vorige frame binnenkwamen. Klik je op het kruisje, dan stuurt pygame QUIT en zetten we actief op False.
  8. 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:

  1. 400 bij 400 pixels groot is
  2. 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.