game-mobile

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

крис касперски ака мыщъх, no-email

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

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

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

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

game-mobile_image_0.jpg

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

Подавляющее большинство мобильных приложений (по некоторым оценкам аж до ~70%) пишутся на Java, а точнее — J2ME, что расшифровывается как Java 2 MicroEdition. Это урезанная версия языка, ориентированная на маломощные системы и поддерживающая рекордное количество мобильных устройств. Вместо «живого» машинного кода, сотовый телефону подсовывают так называемый «байт-код», исполняющийся на виртуальной машине (VirtualMachine или сокращенно 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 входит полноценный Си/Си++ компилятор ARMBuilder, генерирующий высокопроизводительный код, что есть несомненный и бесспорный плюс. Какое-то время назад все были убеждены, что Qualcomm завоюет мир: развертывание BREW шло оптимистичными темпами. Платформа, запущенная в ноябре 2001 года, уже в апреле 2002 в среднем скачивала в день до 60 тыс. приложений из ~250 доступных, выпускаемых ~180 компаниями-разработчиками. Смущало лишь то, что данная технология поддерживала всего лишь 7 моделей телефонов, а Qualcomm требовала обязательной сертификации всех приложений, что с одной стороны гарантировало высокое качество кода, но с другой — высаживало разработчиков на геморрой и потому в дальнейшем ее развитие зашло в тупик.

game-mobile_image_2.jpg

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

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

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

game-mobile_image_4.jpg

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

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

game-mobile_image_5.jpg

Рисунок 6 игра, разработанная при помощи платформы WirelessGraphicsEngine

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

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

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

  1. различные устройства имеют различную раскладку клавиатуры, иногда — удобную, но чаще всего — не очень, это значит, что игра не только должна допускать переопределение клавиш, но и предоставлять тщательно продуманный интерфейс, управляемый одной рукой с минимумом телодвижений;
  2. глубина цветности и разрешение дисплеев сильно неодинаково и уложиться в одну цветовую палитру все равно не получится, ничего другого не остается кроме как создавать несколько версий графического оформления, как это было во времена CGA, EGA и VGA мониторов;
  3. мощность мобильных процессоров и объем динамической памяти варьируется в широких пределах и чтобы при портировании не переписывать игру заново, необходимо изначально заложить в нее модульную структуру, обеспечивающую несколько уровней «реалистичности»;
  4. соотношение мощности процессора и объема памяти так же подвержено вариациям и потому в некоторых случаях более предпочтительными оказываются табличные вычисления, а в некоторых они просто не вмещаются;
  5. энергоемкость аккумуляторов так же различна, а при постоянной загрузке процессора, дисплея и звука потребление тока возрастает весьма значительно — необходимо проектировать игру так, чтобы игровой цикл вмещался хотя бы в полностью заряженный аккумулятор, а с учетом того, что телефон это не только игрушка, но и средство связи, желательно предусмотреть несколько уровней «энергетической прожорливости»;
  6. мобильные устройства совершенно не приспособлены для программирования, и потому основной цикл разработки приходится вести на эмуляторе, но поведение эмулятора может существенно отличатся от поведения «живого» сотового телефона или КПК;
  7. не на все сотовые телефоны можно найти спецификацию и эмуляторы, а если нет спецификации, о программировании на ассемблере можно сразу забыть и приходится программировать под J2ME, оставаясь в полном неведении относительно доступной памяти и производительности;
  8. тестирование игр затруднено тем, что мобильных устройств очень много, стоят они дорого, устаревают быстро и приобретать весь ассортимент имеющегося на рынке оборудования может позволить себе только крупная фирма;
  9. сложность переноса зачастую превышает трудоемкость разработки программы с нуля, тем более, что в этом случае мы можем задействовать специфические особенности конкретной модели телефона;
  10. отсутствует какой бы то ни было стандарт на язык и API мобильных устройств, компиляторы двоичного и байт-кода от разных производителей совершенно несовместимы между собой и обеспечивают переносимость только в рамках заранее выбранного модельного ряда, который постоянно пополняется, но движется в заранее непредсказуемом направлении и очень часто падет вниз, а, поскольку, исходный код компилятора и всех сопутствующих ему библиотек является собственностью фирмы-производителя, разработчики игр совершенно не гарантированы от измены;
  11. мобильный мир очень изменив и непостоянен, за время переноса конкретная модель телефона может давно устареть или быть вытеснена другой с совершенно иными характеристиками и тогда весь процесс придется повторять заново;

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

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

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

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

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

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

  1. http:developer.sonyericsson.com: - основной ресурс для разработчиков приложений под телефоны фирмы SonyEricasson (на английском языке); - http:developer.samsungmobile.com:
    1. основной ресурс для разработчиков приложений под телефоны фирмы Samsung (на английском языке);
  2. http:motocoder.com/motorola/pcsHome.jsp: - основной ресурс для разработчиков приложений под телефоны фирмы Motorola (на английском языке); - http:www.siemens-mobile.com/developer:
    1. основной ресурс для разработчиков приложений под телефоны фирмы Siemes (на английском языке);
  3. http:www.my-onetouch.com/onetouch/ahead/index.jsp: - основной ресурс для разработчиков приложений под телефоны фирмы Alcatel (на английском языке); - http:java.ez-i.co.kr/wire/index.asp:
    1. основной ресурс для разработчиков приложений под телефоны фирмы LG (на английском языке);
  4. http:www.mobilelab.co.kr: - эмуляторы для телефонов фирмы LG; - http://forum.nokia.com: - место обитания разработчиков мобильных приложений под телефоны Nokia (на английском языке); - http:forum.juga.ru:
    1. форум для разработчиков мобильных приложений под телефоны разных фирм (на русском языке);
  5. http:www.mgdc.ru: - еще один отечественный форум мобильных программистов; - создание аркадных игр для мобильных устройств на Java: - статья, описывающая основные принципы создания игр для мобильных телефонов на J2ME (на русском языке): http://lib.juga.ru/article/articleview/177/1/68); - http://www.jug.ru/servlets/images/meeting_2005_02_26/kenjitsu.ppt: - презентация, посвященная вопросам проектирования, реализации и переноса мобильных приложений (на русском языке); - http://www.jug.ru/servlets/images/meeting8/brew.ppt: - сравнение платформы BREW с конкурентами (презентация, на русском языке); - http://www.mabila.kharkov.ua/news22969.html**: - любопытное интервью с Джоном Кармаком по вопросам создания мобильных игр (на русском языке);