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

Здравия желаю.

Хочу поделиться результатами своего знакомства с 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
  • +17
  • 11,3k
  • 6
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 6
  • 0
    > Чтение данных акселерометра

    Есть вопрос. Вы умеете при помощи этой либы корректно определять Double Shake устройства, на манер того, как в iOS отмена ввода, чтоб срабатывало?

    Если да — научите, плз :-)
    • 0
      Если честно, не знаю как Double Shake определяется в iOS, поэтому тут не могу что-либо подсказать.

      Но первое что приходит в голову если немного задуматься — это отслеживание изменения вектора, прочитанного с акселерометра. Момент, когда предыдущее и текущее значение этого изменения отличаются на какую-то величину калибровки, можно считать событием Double Shake.
      • 0
        это ясно :-) Векторы и дельты интересовали :-)
    • 0
      Из-за «часности» и «извесности» рука не поднимается даже плюсик ставить…

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое