Publiceren met pygbag
Je hebt een gaaf spel gemaakt en nu wil je het delen met de rest van de wereld. Met pygbag zet je jouw Pygame-spel om in een webpagina die iedereen in de browser kan spelen. Geen installatie, geen gedoe. Gewoon een link sturen en klaar!
Wat is pygbag?
Pygbag compileert je Python-code naar WebAssembly en verpakt het met een kleine Pygame-runtime die in de browser draait. De speler hoeft niks te installeren: gewoon de pagina openen en spelen. Dat maakt het perfect om je spel te delen met vrienden, familie of op itch.io.
Beperkingen
Pygbag werkt niet met Pgzero (de vereenvoudigde bibliotheek van de eerste sessies). Je hebt echte Pygame nodig, dus dit is beschikbaar vanaf sessie 4 en later.
Verder zijn er een paar dingen die niet werken in de browser:
- Geen schijftoegang: je kunt geen bestanden lezen of schrijven vanuit het spel.
- Geen threads: gebruik geen
threadingofmultiprocessing. - Geen blocking calls: alles moet asynchroon verlopen (zie hieronder).
Installeren
In een uv-project:
uv add pygbagOf in Thonny via de pakketbeheerder:
pip install pygbagProject klaarmaken
Pygbag vereist dat je hoofdlus asynchroon is. Dat betekent: je main-functie wordt async def main(), en in elke frame-iteratie voeg je await asyncio.sleep(0) toe. Die ene regel geeft de browser de kans om te ademen tussen frames.
Hieronder vind je een kant-en-klare basisstructuur: Pygbag-klare structuur voor main.py:
import asyncio
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
async def main():
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 60))
pygame.display.flip()
clock.tick(60)
await asyncio.sleep(0) # required for pygbag
asyncio.run(main())Pas je eigen spelcode aan zodat alles binnen async def main() zit, en vergeet await asyncio.sleep(0) onderaan de while-lus niet.
Bouwen
Navigeer in je terminal naar de map met main.py en voer uit:
uv run python -m pygbag --build main.pyDe output verschijnt in de map build/web/. Die map bevat alles wat nodig is om je spel te hosten.
Lokaal testen
Wil je eerst zien of het werkt voordat je publiceert? Gebruik hetzelfde commando zonder --build:
uv run python -m pygbag main.pyPygbag start een lokale webserver op http://localhost:8000. Open die link in je browser en je speelt je eigen spel, precies zoals anderen het zullen zien.
Publiceren
Als alles werkt, zijn er twee manieren om je spel te delen:
- Via de coach: zip de map
build/web/en geef het zipbestand aan je coach. Die zorgt voor de hosting. - Via itch.io: maak een gratis account op itch.io, maak een nieuw project aan als HTML-game, en upload de zip van
build/web/. Binnen een paar minuten heeft je spel een eigen pagina die iedereen kan bezoeken!
Gefeliciteerd! Je hebt zojuist een echt webspel gepubliceerd. 🎮