Ограничения мобильных игр: батарея, память и жизненный цикл
Батарея, перегрев, память, жизненный цикл приложения — и реальный ответ на вопрос о публикации 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
python-for-android нет принятого официального рецепта pygame-ce — есть только открытые community pull request'ы и пользовательские рецепты, поэтому экспериментальная сборка на Android возможна, но её нельзя считать стандартным или гарантированно поддерживаемым путём. Публикация на iOS возможна через отдельный инструмент сообщества (шаблон проекта плюс сборка в Xcode), автор которого сам описывает его как недостаточно протестированный и не готовый к продакшену, а сборки для App Store лично не проверял. Оба пути требуют заметно больше шагов, чем pip install, и результат стоит проверять на реальном устройстве, а не только предполагать по документации инструмента.Это не значит, что мобильный Pygame-проект невозможен — раздел 20.31 подробно разбирает оба пути (для Android и для iOS) и то, как они выглядят на практике. Но важно закладывать это в план проекта заранее, а не в последний момент: если конечная цель — магазины приложений, ограничения этого раздела (энергопотребление, память, жизненный цикл, сборка через инструменты сообщества) стоит учитывать с самого начала работы над проектом, а не пытаться исправить их постфактум, когда игра уже написана под десктопные предположения.
| Ограничение | Десктоп | Мобильные |
|---|---|---|
| Источник питания | Часто розетка или батарея, рассчитанная на долгую работу | Всегда ограниченная батарея |
| Реакция на нагрузку | Редко становится проблемой | Перегрев снижает производительность |
| Оперативная память | Обычно много | Заметно меньше, строже лимиты |
| Управление жизненным циклом со стороны ОС | Менее активное | Активное — фон, выгрузка, перезапуск |
| Путь публикации | Прямая раздача файла или Steam | Магазин приложений плюс сборка сторонним инструментом |