Проблемы переносимости мобильных игр

Автор: (c)Крис Касперски ака мыщъх

Рынок мобильных игр растет взрывообразно, а вместе с ним растет и программистский интерес. Это лакомый кусок рынка и практически всякий, кто хотя бы однажды создавал игру для ПК, начинает поглядывать в сторону сотовых телефонов. Разработка игр для мобильных устройств - занятие действительно несложное, но есть нюансы.

Введение

Многообразие "железа" под IBM PC доставляет множество неприятностей и буквально сводит разработчиков с ума, но это ничто по сравнению с миром мобильных устройств. Меняется не только архитектура процессора, объем памяти, глубина цветности, но даже геометрия дисплея и расположение кнопок! Это ужесточает требования к дизайну - чертовски трудно создать игру, которая сохраняла бы свою привлекательность на всем спектре устройств. Никакой стандартизацией здесь и не пахнет! Ситуация меняется ежесекундно!

Карманные компьютеры, позиция которых еще вчера казалось несокрушимой, сегодня сходят со сцены, уступая места "смартфонам" - сотовым телефонам с функциями КПК. Мощность процессоров и объемы памяти растут не по дням, а по часам. Цветной дисплей и графический акселератор уже не редкость, а насущная необходимость. Времена, когда пользователь был доволен тем, что установил на сотовый телефон "пасьянс" или "дурака", уже прошли и теперь народ требует трехмерных игр с активной динамикой.

Основная проблема в том, что жизненный цикл мобильных устройств очень невелик, а их популяция крайне разнообразна, поэтому разработка игры для одной конкретно взятой модели, скорее всего, не окупится и придется заняться ее портированием на другие платформы. Это достаточно хитрая и коварная операция, которую следует планировать заранее.

Мобильные телефоны используются не только для связи, но еще и для игр

Рисунок 1. Мобильные телефоны используются не только для связи, но еще и для игр.

Платформы для разработки

Подавляющее большинство мобильных приложений (по некоторым оценкам аж до ~70%) пишутся на Java, а точнее - J2ME, что расшифровывается как Java 2 Micro Edition. Это урезанная версия языка, ориентированная на маломощные системы и поддерживающая рекордное количество мобильных устройств. Вместо "живого" машинного кода сотовому телефону подсовывают так называемый "байт-код", исполняющийся на виртуальной машине (Virtual Machine или сокращенно VM), разработкой которой занимается как сама компания Sun (создатель языка Java), так и сторонние поставщики, ведь спецификации байт-кода открыты, а SDK (пакет программ и библиотек для разработки) бесплатен. Теоретически, игра, написанная для одного сотового телефона, пойдет на любом устройстве, для которого есть соответствующая реализация VM - даже на пылесосе и домофоне! На практике же все выходит иначе. Прежде всего, производительность J2ME приложений крайне невелика и вычислительной мощности даже самых быстрых телефонов для разработки динамичной игры может попросту не хватить! Для преодоления этого ограничения производители телефонов выпускают специальные высокопроизводительные библиотеки (попутно реализующие дополнительные возможности по работе с дисплеем и музыкой), но они не совместимы со стандартной виртуальной машиной, а потому непереносимы. Естественно, Sun не стоит на месте и продолжает наращивать потенциал мобильной Java (достаточно сказать, что в MIDP 1.0 не было поддержки работы со спрайтами и вплоть до появления MIDP 2.0, разработчикам приходилось делать это самим), однако время уже упущено и на мобильную сцену ринулись конкуренты.

Популярная среда разработки

Рисунок 2. Популярная среда разработки Eclipse под J2ME.

Binary Runtime Environment for Wireless (двоичная среда исполнения для беспроводных устройств, сокращенно BREW) - альтернативная программная платформа, разработанная компанией Qualcomm, прочно ассоциируемой с аббревиатурой CDMA, где, собственно говоря, и зародился BREW, а на GSM телефоны был перенесен значительно позднее. Как и следует из его названия - это двоичная среда! В состав бесплатно распространяемого SDK входит полноценный Си/Си++ компилятор ARM Builder, генерирующий высокопроизводительный код, что есть несомненный и бесспорный плюс. Какое-то время назад все были убеждены, что Qualcomm завоюет мир: развертывание BREW шло оптимистичными темпами. Платформа, запущенная в ноябре 2001 года, уже в апреле 2002 в среднем скачивала в день до 60 тыс. приложений из ~250 доступных, выпускаемых ~180 компаниями-разработчиками. Смущало лишь то, что данная технология поддерживала всего лишь 7 моделей телефонов, а Qualcomm требовала обязательной сертификации всех приложений, что с одной стороны гарантировало высокое качество кода, но с другой высаживало разработчиков на геморрой и потому в дальнейшем ее развитие зашло в тупик.

Логотип платформы BREW

Рисунок 3. Логотип платформы BREW.

Разработка мобильных приложений

Рисунок 4. Разработка мобильных приложений на платформе BREW.

Execution Engine - еще один конкурент на голову Sun, разработанный компанией In-Fusio, попытавшейся обойти ограничения, накладываемые J2ME. Это не двоичный код (как у BREW), а виртуальная машина (как у Java), только намного более производительная. В среднем быстродействие возросло в 10 - 15 раз, а на некоторых операциях - и до 30! К тому же, Execution Engine поддерживает ряд жизненно важных графические функций (масштабирование, панорамная прокрутка, трассировка лучей, вращения), которые J2ME-программисты вынуждены реализовывать самостоятельно на медленном байт-коде, а Execution Engine делает это непосредственно из машинно-зависимых библиотек, специальным образом оптимизированных под каждую поддерживаемую модель телефона. Вот только этих моделей очень немного - Philips Fisio 530/825, Alcatel OT 735/535/531, Panasonic X70/G60, Sagem myX-5/myG-5/myX-6, к тому же SDK далеко не бесплатен, что отталкивает многих разработчиков.

Реалистичная трехмерная игра

Рисунок 5. Реалистичная трехмерная игра, разработанная при помощи Execution Engine.

Wireless Graphics Engine (сокращенно WGE) - от компании TTPCom содержит удобный API, ориентированный на создание двух- и трехмерных игр, обеспечения управление фрагментами, функциональность отслеживания столкновений вместе с другими полезными операциями типа сетевого доступа или звуковой поддержки. Короче говоря, программировать на нем - одно удовольствие, к тому же SDK распространяется на бесплатной основе и единственным его недостатком остается ограниченный круг поддерживаемых телефонов.

Игра, разработанная при помощи платформы Wireless Graphics Engine

Рисунок 6. Игра, разработанная при помощи платформы Wireless Graphics Engine.

Mophun - весьма перспективная платформа, разработанная компанией Synergenix и позиционируемая как "карманная консоль на базе ПО". Производительность - выше всяких похвал. Там, где J2ME показывает 400 KIPS, Mophun выдает 60 MIPS, что в 150 раз быстрее. Это, конечно, хорошо. Но ассортимент поддерживаемых устройств, как легко догадаться, невелик, и к тому же Synergenix требует обязательной сертификации всех приложений.

Логотип платформы Mophun

Рисунок 7. Логотип платформы Mophun.

Вывод: J2ME - единственная платформа, обеспечивающая хоть какую-то переносимость. Для разработки неторопливых логических игр это - наилучший вариант, но динамическая графика по производительности уже не тянет. Альтернативные платформы решают проблему производительности ценой потери совместимости и налагают на разработчиков множество различных ограничений (типа лицензирования), что отталкивает от такой практики. Возникает вопрос: если переносимости все равно нет, тогда зачем держаться за враждебные платформы, когда весь необходимый функционал можно реализовать и самостоятельно. На ассемблере. Мы получим наивысшую скорость и наилучшую поддержку конкретного оборудования, а потому сможем создать быструю и динамичную игру с кучей наворотов, которые отсутствуют у конкурентов, пользующихся J2ME. Не такая уж и глупая мысль. Лучшие игры именно (типа Fight Hard 3D) именно так и создаются (см. "Как создавалась Fight Hard 3D или Ассемблер в мобильных устройствах"). Естественно, о переносимости в этом случае придется забыть. Серьезно потрудившись, мы сможем перенести свое творение на пару-тройку популярных телефонов, но не более того, иначе затея окажется нерентабельной и к моменту завершения переноса возникнут новые технологии, появятся новые идеи, и игра, казавшаяся когда-то вершиной научной мысли, станет никому не нужным барахлом. В этом и состоит главное отличие приложений для сотовых телефонов от, например, картин.

Россыпь проблем совместимости

Эмулятор мобильного телефона

Рисунок 8. Эмулятор мобильного телефона типа Nokia на PC под Windows XP.

Как создавалась Fight Hard 3D или Ассемблер в мобильных устройствах

В своем интервью, Влад Суглобов, один из разработчиков популярной игры "Fight Hard", сказал следующее: "Мы работали над Fight Hard 3D (Fight Hard(tm) -- торговый знак компании G5 Software) долгих полтора года и потратили на создание игры деньги, которые до сих пор очень редко тратятся на создание мобильных игр. Fight Hard 3D была задумана первой трехмерной мобильной игрой для телефонов на базе процессора ARM 6 и она ей стала. До сих пор на BREW на таких телефонах есть только две трехмерные игры и обе наши: Fight Hard 3D и RiderX 3D. Мы потратили много времени на то, чтобы сделать игру действительно захватывающей. Мы баллансировали РПГ-модель, тщательно выверяли анимацию бойцов, оптимизировали трехмерный "движок" игры на ассемблере и не выпускали игру, пока не почувствовали, что она получилась действительно интересной, и люди от нее просто не могли оторваться первые полчаса" (http://www.playmobile.ru/articles/g5_software_interview).

Как видно, ассемблер и BREW при всех своих недостатках, позволяют создавать очень стоящие вещи!

Популярная мобильная игра

Рисунок 9. Популярная мобильная игра Fight Hard 3D, созданная с применением Ассемблера.

Заключение

Интерес к мобильным платформам вызван в первую очередь тем, что сотовый телефон дает программистам возможность разработать достойную игру за короткое время (от трех месяцев до года) и со скромными вложениями. На ПК игры выродились в монстров, над созданием которых работают огромные коллективы и чтобы создать нечто конкурентоспособное усилиям нескольких человек, требуется принципиально новые идеи, а у кого они есть?

Сотовый хорош тем, что народ прется от питона, арканоида или тетриса, а от драчки, реализованной в стиле ZX-SPECTRUM буквально бьется в экстазе. К сожалению, в отличии от старика Спектрума, век мобильных игрушек очень недолог. Зато народ их привык покупать (через мобильные службы, конечно), а не тырить естественным образом в ближайшем ларьке. Уровень пиратства на мобильной арене намного ниже, чем на ПК и потому заработать деньги на программировании игр вполне реально даже с учетом всех сложностей переноса на другие платформы, а проблем здесь хватает. Очень хочется надеяться, что через несколько лет ситуация нормализуются и появится если не стандарты, то хотя бы какие-то общие черты, объединяющие все мобильные устройства воедино.

Полезные ссылки