Skip to content

Latest commit

 

History

History
156 lines (99 loc) · 4.36 KB

README.md

File metadata and controls

156 lines (99 loc) · 4.36 KB

pygbag

pygame wasm for everyone ( packager + test server )

runs pygame directly in modern web browsers, including mobile versions.

"your_game_folder" must contains a main.py and its loop must be async aware eg :

import asyncio
import pygame

pygame.init()
pygame.display.set_mode((320, 240))
pygame.display.set_caption("TEST")


async def main():
    count = 3

    while True:
        print(f"""

        Hello[{count}] from Pygame

""")
        pygame.display.update()
        await asyncio.sleep(0)  # very important, and keep it 0

        if not count:
            pygame.quit()
            return
        count = count - 1

asyncio.run( main() )

# do not add anything from here
# asyncio.run is non block on pygame-wasm

usage:

pip3 install pygbag --user --upgrade
pygbag your_game_folder

command help:

pygbag --help your_game_folder

eg

user@pp /data/git/pygbag-wip $ python3.8 -m pygbag --help test
 *pygbag 0.2.0*

Serving python files from [/data/git/pygbag-wip/test/build/web]

with no security/performance in mind, i'm just a test tool : don't rely on me

usage: __main__.py [-h] [--bind ADDRESS] [--directory DIRECTORY]
 [--app_name APP_NAME] [--ume_block UME_BLOCK] [--cache CACHE]
 [--package PACKAGE] [--title TITLE] [--version VERSION] [--build]
 [--archive] [--icon ICON] [--cdn CDN] [--template TEMPLATE]
 [--ssl SSL] [--port [PORT]]

optional arguments:
  -h, --help            show this help message and exit
  --bind ADDRESS        Specify alternate bind address [default: localhost]
  --directory DIRECTORY
                        Specify alternative directory [default:/data/git/pygbag/test/build/web]
  --PYBUILD PYBUILD     Specify python version [default:3.11]
  --app_name APP_NAME   Specify user facing name of application [default:test]
  --ume_block UME_BLOCK
                        Specify wait for user media engagement before running [default:1]
  --can_close CAN_CLOSE
                        Specify if window will ask confirmation for closing [default:0]
  --cache CACHE         md5 based url cache directory
  --package PACKAGE     package name, better make it unique
  --title TITLE         App nice looking name
  --version VERSION     override prebuilt version path [default:0.3.0]
  --build               build only, do not run test server
  --html                build as html with embedded assets (pygame-script)
  --no_opt              turn off assets optimizer
  --archive             make build/web.zip archive for itch.io
  --icon ICON           icon png file 32x32 min should be favicon.png
  --cdn CDN             web site to cache locally [default:https://pygame-web.github.io/archives/0.3.0/]
  --template TEMPLATE   index.html template [default:default.tmpl]
  --ssl SSL             enable ssl with server.pem and key.pem
  --port [PORT]         Specify alternate port [default: 8000]

Now navigate to http://localhost:8000 with a modern Browser.

use http://localhost:8000#debug for getting a terminal and a sized down canvas

for pygame-script go to http://localhost:8000/your_game_folder.html

v8 based browsers are preferred ( chromium/brave/chrome ... ) starting with 81.0.4044 ( android 4.4 ). Because they set baseline restrictions on WebAssembly loading. Using them while testing ensure proper operation on all browsers.

NOTES:

  • first load will be slower, because setting up local cache from cdn to avoid useless network transfer for getting pygame and cpython prebuilts.

  • each time changing code/template you must restart pygbag your_game_folder but cache is not destroyed.

  • if you want to reset prebuilts cache, remove the build/web-cache folder in your_game_folder

BUILDING:

pygbag is not only a python module, and rebuilding all the toolchain can be quite hard

https://github.com/pygame-web/python-wasm-sdk <= build CPython (not pyodide)

then read/use pygbag CI to see how to build pygame + the C loader (pymain) and link it to libpython + libpygame

https://github.com/pygame-web/pygbag

prebuilts used by pygbag are stored on github from the repo https://github.com/pygame-web/archives under versionned folders

ADDING STATIC MODULES:

see in package.d directory

Support via Discord:

https://discord.gg/t3g7YjK7rw   ( #pygame-web on Pygame Community )

French support:

forum thead:
    https://discuss.afpy.org/t/moteur-2d-pour-python-pygame-web/834/2

irc:
    #python-fr-off on libera.chat