Запускаем Pygame-игру в браузере
pygbag — активно поддерживаемый инструмент сообщества для сборки Pygame-игры в WebAssembly, не официальная часть pygame-ce.
Раздел 20.10 уже упоминал: веб-игра на Pygame попадает в браузер через технологию WebAssembly. Инструмент, который делает эту сборку на практике, называется pygbag — активно поддерживаемый проект сообщества, а не официальная часть самого pygame-ce.
pip install pygbag
pygbag moya_igra/
Команда запускает локальный веб-сервер и открывает игру прямо в браузере — удобно для проверки перед публикацией на постоянный хостинг. Обратите внимание: аргумент — это папка проекта, а не отдельный файл.
main.py — это имя зашито в сборку, и переименовать его нельзя. Коварство в том, что при другом имени (igra.py, game.py) сборка завершится успешно и без единого предупреждения, но в браузере игра просто не запустится: загрузчик будет искать main.py, которого в собранном архиве нет. Если после сборки страница открывается, но остаётся пустой, — первым делом проверьте имя файла.Что в вебе устроено иначе
Браузерная версия игры работает не совсем как обычный запуск на десктопе — код исполняется внутри песочницы браузера, из которой:
| Обычный запуск на десктопе | Сборка через pygbag | |
|---|---|---|
| Доступ к файловой системе | Полный | Ограничен песочницей браузера |
| Главный цикл | while True в вашем коде | Асинхронный, с await asyncio.sleep(0) на каждом кадре |
| Установка | Требуется Python и pip install | Не требуется — открыл ссылку и играешь |
| Производительность | Родная скорость процессора | Может отличаться от настольной — стоит измерять на целевом устройстве |
Главная практическая разница в коде — цикл игры должен стать асинхронным
(async def main() с await asyncio.sleep(0)
в конце каждого кадра), чтобы не блокировать поток браузера: pygbag ожидает именно
такую структуру программы. Важно, что await здесь добавляется
рядом с clock.tick(), а не заменяет его — в примерах самого
pygbag ограничение частоты кадров остаётся на месте, а строка с
await идёт сразу после него.
Насколько браузерная сборка медленнее настольной, заранее сказать нельзя: это зависит от браузера, устройства игрока и самой игры. Производительность стоит измерять на целевом устройстве, а не закладывать какой-то определённый процент потерь заранее.