Знакомство с Pygame Subset for Android

Development for Android
Sandbox
Здравия желаю.

Хочу поделиться результатами своего знакомства с Python (которое началось не так давно), а в частности с портом на платформу Android довольно известной медиа-библиотеки Pygame (которая, в свою очередь, является оберткой для не менее известной SDL). Поскольку поиск на хабре по теме поста не дал результатов, рискну предположить что тема ранее не поднималась, но в тоже время будет интересна людям, заинтересованным в применении Python для разработки приложений, использующих медиаконтент, в том числе для Android.

Итак, Pygame Subset for Android (PS4A).

The Pygame Subset for Android is a port of a subset of Pygame functionality to the Android platform. The goal of the project is to allow the creation of Android-specific games, and to ease the porting of games from PC-like platforms to Android.

Именно таким текстом встречает посетителя главная страница сайта PS4A. Там же можно без труда обнаружить ссылки для скачивания .apk и установки из Android Market, а также оглавление имеющейся документации. Собственно в документации можно отыскать список модулей, которые портированы (разделены на группы таким образом: android, android_mixer, pygame и Python) а также руководства для выполнения конктетных действий. Если честно, объем документации не впечатляет, но для начала вполне достаточно. Там же, на сайте, есть и шаблон приложения (с обнадеживающим названием «Writing a game», но очень упрощенный – готовое приложение можно скачать по ссылке внизу), и ссылки на родительские технологии/библиотеки (Pygame, SDL, Python, Jtar).

Впервые скриптинг под Android я попробовал благодаря Scripting Layer for Android и был заинтригован расширением возможностей в направлении графики. Так мне и попался PS4A. Сразу было принято решение написать демку, которая проверяла бы следующий функционал:
  • Чтение данных акселерометра
  • Вывод графических примитивов, спрайтов
  • Вывод текста
  • Проверка производительности (проще говоря – вывод FPS)
  • Ввод с помощью сенсорного экрана
Признаюсь что результирующая демка не блещет функциональностью, но с поставленными задачами, на мой взгляд, вполне справилась. Еще отмечу что разработка с помощь PS4A практически не отличается от работы с Pygame (разве что иногда нужно сверять поддерживаются ли модули, которые планируется использовать), поэтому приложение абсолютно одинаково ведет себя как на Windows XP (Python 2.5.2) так и на LG Optimus One (PS4A 0.9.2), что весьма удобно – не надо каждую правку проверять на девайсе.

Вот что получилось:
image

В верхнем левом углу выводятся: FPS, последний обработанный event, данные прочитанные с акселерометра и общее количество выводимых примитивов (линий и точек). Замечено стремительное падение FPS после отрисовки 100+ примитивов. В нижнем левом углу – toogle-button для включения/выключения задержки на 50 миллисекунд каждого кадра, а в правом нижнем углу – кнопка очистки экрана от результатов творческого процесса. Робот (зеленый персонаж в белом квадрате, на скриншоте он находится в правом нижнем углу скрывая за широкой спиной половину кнопки очистки экрана) перемещается по экрану в зависимости от данных прочитанных с акселерометра. На устройстве приложение работает корректно, но FPS скромно держится в районе 20-25.

В качестве вывода можно сказать что вряд ли PS4A можно использовать для разработки каких-либо серьезных игр или медиаприложений (быстродействие оставляет желать лучшего, и поддержки OpenGL, насколько я понимаю, нет даже в планах), но для небольших спрайтовых демок – вполне.

Приложения:


  1. Демка из “Writing a game” (меняет цвет экрана при нажатии)
  2. Моя демка (предупреждение для эстетов и гуру — код довольно громоздкий и не претендует на изящное решение задачи)

(Для установки на устройство приложение достаточно распаковать из архива и залить в /sdcard/pygame/<отдельная_папка>, после чего его можно будет обнаружить в главном меню PS4A).

Ссылки:


  1. Pygame Subset for Android — pygame.renpy.org
  2. Pygame — pygame.org/news.html
  3. Блог по книге “Invent Your Own Computer Games with Python”, там же ссылка на бесплатный eBook — inventwithpython.com/blog/category/code-comments
Tags:androidpythonpygamepygame subset for android
Hubs: Development for Android
+17
16.9k 47
Comments 6

Popular right now

Python-разработчик с нуля
February 24, 202169,900 ₽Нетология
Python для работы с данными
February 24, 202131,500 ₽Нетология
Android Developer. Professional
March 12, 202160,000 ₽OTUS
Python QA Engineer
March 16, 202160,000 ₽OTUS