Глава 20 · Разработка игр с Pygame

Ограничения мобильных игр: батарея, память и жизненный цикл

Батарея, перегрев, память, жизненный цикл приложения — и реальный ответ на вопрос о публикации Pygame-игры в App Store и Google Play.

Разберём ограничения мобильной разработки, которые не видны на первый взгляд, и вопрос, который рано или поздно возникает у каждого, кто дошёл до этого места: можно ли просто взять и опубликовать Pygame-проект в App Store и Google Play?

Батарея и перегрев

Телефон работает от ограниченной батареи и имеет ограниченный тепловой бюджет — заметно более жёсткий, чем у ноутбука, который часто подключён к розетке или несёт батарею большей ёмкости. Игровой цикл, который держит процессор загруженным на полную мощность без остановки (см. раздел 20.15 про clock.tick()), длительной высокой нагрузкой CPU/GPU ускоряет разряд батареи и может привести к thermal throttling — системному снижению частоты процессора для защиты от перегрева, из-за которого игра начинает тормозить не из-за плохого кода, а из-за самой этой защиты.

Память

Мобильные устройства обычно располагают заметно меньшим объёмом оперативной памяти, чем настольный компьютер, и операционная система гораздо агрессивнее следит за приложениями, которые расходуют её слишком много.

Жизненный цикл приложения

Настольные приложения тоже не работают в вакууме: они могут терять фокус, засыпать вместе с компьютером или закрываться из-за сбоя. Но на телефоне операционная система управляет жизненным циклом приложения заметно активнее и чаще: она может в любой момент отправить игру в фон (пришёл звонок, игрок свернул приложение) и позже либо вернуть её в точности с того места, либо — если памяти не хватает — выгрузить из памяти полностью, и при повторном запуске игра стартует заново. Мобильная игра должна корректно переживать переходы между foreground и background. Если потеря текущего состояния важна для игрока, приложение должно сохранять нужный прогресс или checkpoint до возможного завершения процесса.

Магазины приложений, реклама и покупки внутри игры

Публикация на телефон почти всегда означает публикацию через магазин приложений — Google Play для Android или App Store для iOS. У обоих есть процесс проверки перед публикацией, правила оформления страницы приложения и (для многих категорий игр) типичная бизнес-модель через показ рекламы или покупки внутри игры (in-app purchases, IAP) — это отдельная большая тема бизнеса мобильных игр, выходящая за рамки этой книги, но полезно знать, что она существует и влияет на то, как устроены многие мобильные игры «изнутри».

Публикация Pygame-игры на Android и iOS

У Pygame нет встроенного экспорта на Android и iOS
У Pygame и pygame-ce нет официальной, встроенной команды «собрать APK» или «собрать приложение для iOS». На момент проверки в основном репозитории стороннего инструмента python-for-android нет принятого официального рецепта pygame-ce — есть только открытые community pull request'ы и пользовательские рецепты, поэтому экспериментальная сборка на Android возможна, но её нельзя считать стандартным или гарантированно поддерживаемым путём. Публикация на iOS возможна через отдельный инструмент сообщества (шаблон проекта плюс сборка в Xcode), автор которого сам описывает его как недостаточно протестированный и не готовый к продакшену, а сборки для App Store лично не проверял. Оба пути требуют заметно больше шагов, чем pip install, и результат стоит проверять на реальном устройстве, а не только предполагать по документации инструмента.

Это не значит, что мобильный Pygame-проект невозможен — раздел 20.31 подробно разбирает оба пути (для Android и для iOS) и то, как они выглядят на практике. Но важно закладывать это в план проекта заранее, а не в последний момент: если конечная цель — магазины приложений, ограничения этого раздела (энергопотребление, память, жизненный цикл, сборка через инструменты сообщества) стоит учитывать с самого начала работы над проектом, а не пытаться исправить их постфактум, когда игра уже написана под десктопные предположения.

ОграничениеДесктопМобильные
Источник питанияЧасто розетка или батарея, рассчитанная на долгую работуВсегда ограниченная батарея
Реакция на нагрузкуРедко становится проблемойПерегрев снижает производительность
Оперативная памятьОбычно многоЗаметно меньше, строже лимиты
Управление жизненным циклом со стороны ОСМенее активноеАктивное — фон, выгрузка, перезапуск
Путь публикацииПрямая раздача файла или SteamМагазин приложений плюс сборка сторонним инструментом