Разработка OpenGL игр под платформу Android

    Некоторое время назад я закончил портирование игры iDracula — Undead Awakening которую разработала компания Moregames Entertainment с платформы iPhone, на платформу Android.

    Я готов поделиться с вами своими мыслями и проблемами, с которыми я столкнулся.


    Хочу предупредить что я гораздо больше работал с платформой Android (исходя из специфики задачи :), но так же имею опыт разработки более «мелких» игр для платформы iPhone. Так же игры для iPhone я разрабатывал на cpp, а не ObjectC.

    Cреда и инструменты разработки



    Сложная тема, учитывая разность языков и операционных систем. Поэтому коротко и ИМХО.
    xCode к сожалению на мой взгляд сложно назвать современной IDE, особенно когда приходиться много работать и рефакторить чужой код. В этом плане преимущество IntelliJ IDEA, или Eclipse (плагин для разработки под Android есть под обе IDE) чувствуется очень сильно. Мне в ряде случае было проще перенести код как есть, а потом уже сделать определенный рефакторинг кода уже в java версии. Отладка под xCode так же требует гораздо больше навыком и знания определенной специфики. К минусам инструментов платформы Android можно отнести некоторую нестабильность плагинов (особенно eclipse) — они периодически забывают adb.exe в памяти, что делает невозможным профилирование через DDMS. Необходимо соблюдать четкий порядок, сначала запустили ddms, потом уже отлаживаемся. Существенным минусом так же является тяжеловесность эмулятора — стартует он долго, работает медленно. При 35 fps на устройстве я на своем MacBook Pro имею 15 fsd на эмуляторе, и еще меньше в режиме отладки, что делает не возможность полноценного тестирования многих вещей. Симулятор для iPhone стартует практически мгновенно, и не уступает в скорости девайсу.

    SDK



    Единственная проблема с которой я cтолкнулся при разработке под iphone это отсутствие поддержки ogg. Проблема решилась простым портированием соответствующей библиотеки.

    С Android SDK к сожалению не все так просто.

    Самая серьезная проблема это утечки памяти при использовании OpenGL функций glXXXPointer. Фактически на каждый вызов функции мы имеем memory leak размеров в массив который мы устанавливаем. Т.е. что не делай при использовании этих функций мы рано или поздно получим вызов gc, а это от 200 до 1500 ms лаг. Вот тут есть подробности. Так же стоимость вызова функций glXXXPointer сильно выше, что впрочем ожидаемо.

    Большая стоимость обработки тачскрина — т.е. тупо у вас 50 фпс, ставите палец на экран у вас 30 фпс. Ибо плодятся MotionEvent-ы и грузят систему. Решение делать sleep после получения MotionEvent решает проблему не польностью.

    Отсутствие поддержки мультитача. Причем на уровне SDK, т.е. даже если у вас прошивка которая поддерживает мультитачь, или HTC Hero в котором так же есть поддержка мультитача — вы в данный момент не сможете использовать его в своем приложении.

    Устройства



    К сожалению в текущий момент мы имеем достаточно разные устройства. Основные проблемы связаны с HTC Dream (G1). G1 имеет гораздо более худшую чувствительность трекбола по сравнению с Magic и Hero. Там где игрок будет комфортно играть используя трекболл на Magic, он может иметь проблемы на Dream.

    Есть проблемы и получением данных с сенсоров положения при включенной музыки. Если у вас играет музыкальный трек с громкостью 0,5 от максимальной, то даже в неподвижном состоянии вы будите получать дребезг датчиков от -40 до +40 из возможного диапазона от -90 до +90 (-180/+180). Фактически при таком дребезге не возможно использовать датчики положения для управления игрой. Только при снижении громкости до 0,2 от максимальной дребезг снижается до диапазона -4/+4, что уже приемлемо.

    На G1 так же есть проблемы с малым количеством памяти, они усугубляется тем что виджеты которые пользователь размещает на своем рабочем столе могут потреблять мого памяти (до 15 мегабайт), но при этом пользователю не очевидно что они являются запущенными программами. Поэтому можно получать разные отзывы от пользователей с одинаковыми устройствами. От «вау игра летает» до «невозможно играть, одни лаги» (см. пункт выше о мемори ликах).

    Проблемы с G1 с малым количеством места для установки программ, в среднем на нулевой системе у пользователя порядка 30 мегабайт. После установки приложений меньше. Если приложение большое (полная версия iDracula занимает 13 мегабайт) то могут быть проблемы с установкой. Ниже распишу более подробно.

    Доставка контента пользователю



    К сожалению Android Market по всем параметрам проигрывает AppStore.

    В текущий момент на маркете нету возможности указать устройства под которые разработано ваше приложение.
    Т.е. если вашему приложению нужна hardware клавиатура, или мультитач (когда его введут), то приложение будет видно владельцам устройств без этих опций и вы будите получать негативную оценку от них.

    Проблемы с установкой больших приложения. Уже как лет пять на всех сотовых телефонах при установки приложения пользователь после скачивания приложения в случае нехватки места для установки помимо предупреждения получает диалог с возможностью удалить текущие приложения и сражу же продолжить установку. На android он вынужден вызвать множество меню для данного дейсвия. Более того если ваше приложение занимает 10 мегабайт, то для его установки требуется минимум 20 мегабайт (скаченый файл, и место для установки).
    Одним из решений является установки приложения без ресурсов, и скачиванием ресурсов самим приложением с сохранением их на флешку.
    Хотелось бы видеть это стандартной возможностью SDK — возможность пометить часть файлов для размещения на флешке.
    Так же очень не хватает возможности получить помимо отзыва (например о падении приложения) информацию об устройстве на котором пользователь оставляет отзыв, а в идеале лог работы приложения как это сделано в iphone.
    Не хватает раздела Entertaiment — игры вынуждены соревноваться в топах с приложениями типа «Красивый огонь на вашем экране».
    Ну и отсутствие скриншотов, приводит к тому что игру в большей мере выбирают исходя из названия (описания как известно никто не читает), такая проблема была, кстати, и на BREW рынке. Плюс еще есть ограничение на размер описания.

    Если резюмировать, то разрабатывать нужно приложения размером до 3х мегабайт, используя, желательно, не более 15 мегабайт памяти и делать запас на тормоза при работе с тачскрином.

    Изначально было желание написать более структурированный обзор и больше времени уделить iphone, но чувствую что так статья бы провалялась в черновиках еще бы месяц. Надеюсь, сложенное будет полезно и в таком виде. Я готов ответить на вопросы в комментариях.

    P.S. Если у вас есть готовая игра под iphone или другую мобильную платформу и вы хотите ее порт под Android с условием shared revenu или фиксированной оплаты, то я с удовольствием пообщаюсь с вами. :) Например по скайпу — youngskipper. Готов так же пообщаться с другими разработчиками — по обсуждать платформу.
    Поделиться публикацией

    Комментарии 28

      0
      Как то оно криво все…
      Если не сложно, дайте плиз линк на информацию про отзывы с логами для iPhone.
      +2
      не понял про раздел Entertaiment, есть же раздел games
        +1
        Да есть только Games, а нужно по хорошему и Entertaiment и Game.
        Чтобы не мешать в одну кучу скринсейверы и прочее, прочее.
          0
          есть и то и другое
          www.cyrket.com/type/1
            0
            Да, моя ошибка.

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

            Желательна модерация по жанрам — напишем так. :)
              0
              по ссылке нет 'games'
                0
                Потому что это подразделы Application. Есть два больших раздела Games и Application.

                Подразделы Games — www.cyrket.com/type/4

                Мое мнение что как минимум четверть того что находиться в Games нужно перенести в Application.
          0
          А кроме трекбола и памяти, есть еще существенная разница между G1 и остальными? У меня, к сожалению, только G1, а очень интересно, будет ли работать софтинка на остальных. Используется компас, камера, OpenGL, Touchscreen и трекбол.
            +1
            У некоторых устройств (из текущих вроде как у самсунга, и ряд будуших) нету трекбола. Есть только D-Pad.
            +2
            > Эмулятор для iPhone стартует практически мгновенно, и не уступает в скорости девайсу.
            Не путайте эмулятор и симулятор.

            Работа в симуляторе и на девайсе может отличаться, т.к. симулятор — «по мотивам» телефона ;)
            Попробуйте записать файл в корень диска, к примеру — увидите разницу.
              0
              Поправил, просто написал по инерции.
                0
                Ну я написал не для того, чтобы придраться по «симулятор не эмулятор», а просто показать, откуда берутся тормоза ;)
                  0
                  Я понял. Просто не вдаваясь в детали отлажиться, да и просто играть на эмуляторе нельзя :(
              0
              спасибо )
                0
                Да уж… какой SDK ни возьми — везде куча недоделок, багов, мемори ликов и хитрых особенностей, которые заставляют вставлять в код особые костыли… И которые еще нужно убирать\вставлять при выходе новых версий этих SDK :(
                  0
                  Это не самое страшное. А и лики это скорее не баги, а фичи, если там можно выразиться, связанные с необходиомстью размещать массивы в неперемещаемой памяти — так сказать ограничение платформы. Хотя его и можно было бы обойти конечно.

                  Страшнее другое — необходимость множества версия. Как сейчас для j2me без двухдесятков билдов не обойтись, тоже самое может нас ждать и для андроида.

                  Во есть China Mobile с oPhone на базе андроида. Но там SDK 1.0, а не 1.5. т.е. нужно делать версию для них.

                  Нужно по хороему сделат версия со скачиваемыми ресурсами, но для тех у кого место есть лучше оставить текущую. И т.п.

                  +4
                  нельзя писать игры, в которых ресурсы занимают 10 мб.
                  вас все пользователи (как я, к примеру) порвут за это.
                  я, к слову, сам разрабатываю Starcraft под андроид. (это что бы не говорили мне «ты — тупой юзер» =)

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

                  >>Во есть China Mobile с oPhone на базе андроида.

                  это ИХ проблема, а не наша. пишем все под последние версии и выкладываем версии для новых SDK через пару месяца их выхода.
                    +3
                    Я вообще по отношению к пользователям, особенно своих приложений, слово «тупой» не использую.

                    Да дейсвительно я перечислил не сколько баги, сколько просто недороботки. Да я верю что они будут исправлены.

                    Дейсвительно 10 мегабайт для G1 много, но вопервых только для G1, а во вторых почему бы не пойти по аналогии и то тоже самое сказать про SDK 1.0. Почему особенность платформы G1 — мало место, это моя проблема, а особенности платформы oPhone — SDK 1.0, это проблема пользователей?

                    Не логично как-то. Да и глупо… зщачем же пользователей терять. Все что нужно это получить возможность выкладывать несколько версий приложений, чтобы был автоматов выбор в зависимости от СДК на устройсте. Это просто и логично.

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

                      +3
                      «да и айфон больше для игр сделан, а андроид для интернета»

                      вот мне всегда было интересно, как рождаются вот всякие такие не несущие вообще под собой никакой фактической базы мифы? как айфон мог делаться под фичу, сама возможность которой появилась только через год после запуска?
                      ну и да, платформа андроида моложе на 3-4 месяца, а не в 3-4 раза.

                        –1
                        Разница между iPhone и Android, как минимум 1 год.
                          +2
                          а мы разве о телефонах говорим, а не о патформах?
                            0
                            теоретически так, а на практике приток разработчиков происходит после появления рабочего аппарата. Он уже (приток) провоцирует обнаружение проблем и их исправление.
                              0
                              да, но только та платформа которую мы знаем сейчас, как раз вышла вместе с телефоном, то что было раньше, там то и сдк толком не было описано нормально, ни примеров, ничего.
                              0
                              Нет,
                              разница в миллиард скачанных приложений,
                              в армии простоых людей
                              в удобно реализованной возможности установки и покупки приложений
                              в тысячах профессиональных девелоперов
                              в огромной машине Apple по разработке хорошего и с частыми апдейтами SDK
                              в огромном привлекательном рынке для инвесторов (150 млн против 5млн у Андроида :)

                              Это то, о чём IT-шники всегда забывают, а менеджеры — помнят.
                          0
                          А в будущем есть у андроида игровой потенциал, как думаете? Ведь устройства с ним, вроде как, достаточно мощные.
                            0
                            Я не вкладываю ни денег ни сил, только iPhone. Хотите поспорить — вложите 100-200 000 USD в разработку, через год померяемся снова профитом с каждого вложенного USD :)

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

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