pygame wasm

pygame-web.github.io

This is the CDN root used by Pygbag.

The wiki.

Source code

Old runtimes and current

Pygbag does not track usage at all, not even for statistical purposes.

If you like it, please star the repository!

(Very) important points

Also, read the page on making your code compatible with browser game loop. You will probably have to change some of your code.

All operating systems

Before packaging, adapt your code this way if you still want WAV/MP3 format on desktop:

if sys.platform == "emscripten":
    snd = pygame.mixer.Sound("sound.ogg")
else:
    snd = pygame.mixer.Sound("sound.wav") # or .WAV, .mp3, .MP3, etc.

if you have heightmaps in your assets use --no_opt to prevent png recompression.

if you want to keep pixelated look whatever the device screen size is use:

import sys, platform
if sys.platform == "emscripten":
    platform.window.canvas.style.imageRendering = "pixelated"

Windows

MacOS

Linux

Templates

There is actually nothing specific for projects except naming entry point main.py, because Python-WASM is just a web-friendly version of CPython REPL with some added facilities. Most desktop code will run (and continue to run) with only a few changes.

Basic structure of a game (available here):

test
├── img
│   ├── pygc.bmp
│   ├── pygc.png
│   └── tiger.svg
├── main.py
└── sfx
    └── beep.ogg

Useful .gitignore additions:

*.wav
*.mp3
*.pyc
*.egg-info
*-pygbag.???
/build
/dist

But there are templates to customize runtime startup for 2D and 3D, see templates

controlling pygbag packing and options from pygbag.ini

Coding

Adding modules

When importing non-stdlib packages (for example, numpy or matplotlib), you must put their import statements at top of main.py. You should also add a metadata header as specified by PEP 723, for example:

# /// script
# dependencies = [
#  "six",
#  "bs4",
#  "markdown-it-py",
#  "pygments",
#  "rich",
#  "mdurl",
#  "textual",
# ]
# ///

Debugging / Desktop Simulator

There’s number of command line options : read Pygbag’s project description for a more detailed overview.

Visit the wiki to get started!

Work in progress, pull requests welcomed. Feel free to propose links to games or tutorials. Please contribute!!!

Edit this page