Cocos2d x android studio

Создание многоплатформенных игр с использованием Cocos2d-x версии 3.0 и выше

В данном руководстве вы узнаете о том, как создать простую игру с помощью Cocos2d-x 3.0 или более поздней версии в среде разработки Windows и как скомпилировать её для запуска в Windows и Android.

Что такое Cocos2d-x?

Cocos2d-x – кросс-платформенный фреймворк для игр (и других графических приложений, например, интерактивных книг), основанный на cocos2d для iOS, но вместо Objective-C использующий языки C++, JavaScript или Lua.

Одно из преимуществ этого фреймворка – возможность создания игр для разных платформ (Android, iOS, Win32, Windows Phone, Mac, Linux и другие). При этом основа программы остается той же – требуется лишь незначительная адаптация под конкретную платформу.

Консоль Cocos2d-x

Консоль cocos2d-console появилась в версии 3.0. Это командная строка, предусматривающая те же функции, что и средства управления проектами в Cocos2d-x или Cocos2d-JS — создание, выполнение, построение, отладку и т.д.

Создаём свою первую игру

1. Скачайте последнюю версию фреймворка и распакуйте архив. В данном руководстве использовалась версия 3.3rc0, а архив фреймворка был распакован на рабочий стол (C:\Users\intel-user\Desktop\cocos2d-x-3.3rc0).


Структура директории Cocos2d-x версии 3.3 RC0

2. Чтобы создать в cocos2d-x новый проект, используйте setup.py (скрипт на языке Python), который находится в папке фреймворка. Он позволит конфигурировать все переменные среды для платформ Win32 и Android. Перед выполнением setup.py вам потребуется скачать, инсталлировать и конфигурировать следующие элементы:


Расположение setup.py

3. Откройте командную строку (cmd.exe) и выполните следующие команды:

– Перейдите в папку скрипта (папку фреймворка):

– Выполните скрипт setup.py:

Примечание: чтобы выполнить команду Python из командной строки, добавьте в переменную среды path папку, куда установлен Python. Скрипт потребует пути инсталляции для Android SDK, Android NDK и ANT.

– Папка Android NDK:


Cocos2d-console требует указания пути к папке NDK

– Путь к папке Android SDK:


Cocos2d-console требует пути к папке SDK

– Путь к папке Apache ANT:


Cocos2d-console требует пути к папке ANT

После указания всех путей снова откройте командную строку (cmd.exe). Это действие необходимо для использования команд cocos2d-console.

4. Наберите cmd.exe, чтобы выйти на командную строку (команды cocos2d-console можно вводить только здесь) и снова откройте папку фреймворка:

На следующем шаге мы создадим новый проект Cocos2d-x:


Создание проекта Cocos2d-x

Краткое пояснение параметров:

  • new: создаёт новый проект; за ним должно следовать имя проекта (в данном примере -MyGame);
  • -p: задаёт имя пакета;
  • -l: выбирает язык программирования; значением может быть cpp или lua;
  • -d: директория, в которой фреймворк создаёт структуру проекта.

Если всё нормально, то проект создается в папке Project – в директории, куда был распакован фреймворк.


Структура директории MyGame

Созданный проект содержит базовый код игры (классы), ресурсы (изображения, аудио и т.д.) и по одному проекту для каждой поддерживаемой фреймворком платформы.

Создаём Android-приложение

Требования:

  • Для создания игровых приложений для Android вам нужно конфигурировать все переменные среды (Android SDK, Android NDK и ANT). Если вы ещё не выполнили этот шаг, смотрите выше раздел «Создаём свою первую игру».
  • Установленный Java Development Kit (JDK)
Читайте также:  Андроид процент зарядки батареи

Примечание: для создания Android-приложений Cocos2d-console использует команду javac, поэтому нужно добавить переменную среды JAVA_HOME (путь для JDK).

1. Мы будем компилировать игровую программу для нескольких архитектур, а фреймворк не компилирует по умолчанию для x86 и armeabi-v7a. Отредактируйте файл Application.mk в C:\Users\intel-user\Desktop\cocos2d-x-3.3rc0\Project\MyGame\proj.android\jni


Расположение файла Application.mk

2. Добавьте в этот файл следующую строку:


Application.mk после добавления строки APP_ABI

Теперь, после добавления целевых архитектур, давайте скомпилируем нашу игру!

3. Используя подсказку командной строки, перейдите в папку фреймворка:

4. Выполните показанную ниже команду и запустите игру для Android:


Выполнение команды для компиляции и выполнения игры для Android

  • run: компилирует и выполняет проект;
  • -s: путь к папке проекта;
  • -p: выбранная платформа.

Примечание: если требуется только компиляция, введите:

Если всё работает правильно, то команда cocos2d-console будет использовать adb (если это задано в переменных среды) для инсталляции файла APK на подключённом устройстве или инициализированном эмуляторе. При их отсутствии команда будет ожидать доступности устройства или эмулятора, как показано ниже:


Команда ожидает устройства или инициализированного эмулятора

При наличии подключенного устройства или инициализированного эмулятора появится следующий экран:


Экран игровой программы на платформе Android

Создание приложений Win32 (для ПК под Windows 7 или Windows 8)

Нам потребуется Visual Studio 2012 или более поздняя версия.

1. Используя приглашение командной строки (cmd.exe), перейдите в папку, куда был распакован фреймворк:

2. Для компиляции и запуска игры на выполнение в среде Windows введите команду:


Выполнение команды компиляции и запуска игры в Windows

Кратко о параметрах:

  • run: компиляция и запуск на выполнение выбранного проекта
  • -s: путь к папке проекта
  • -p: выбранная платформа

Примечание: если требуется только компиляция, используйте “compile” вместо “run”, как в следующем примере:

Если всё работает правильно, то после выполнения команды run вы увидите следующий экран:


Экран игры на платформе Windows

Для компиляции и запуска проекта игры можно использовать Visual Studio:

1. В директории Project откройте файл Visual Studio MyGame.sln в папке “proj.win32”.


Структура директории проекта Win32

2. Для компиляции проекта нажмите F6 (или используйте меню Build -> Build Solution) и F5 для его запуска (либо меню Debug -> Start Debugging). После построения и выполнения вы должны увидеть тот же экран, что и после выполнения шагов для консоли.


Проект Win32, открытый в Visual Studio

Итак, теперь вы знаете, как создать и скомпилировать игру для Android (x86 и ARM), Windows 7 и Windows 8 (в режиме десктопа), браво 🙂

Чуть не забыли

В настоящее время в версии Cocos2d-x 3.3 есть проблема – инструментарий не позволяет создавать проекты (подробности здесь). Эта проблема исправлена в последней предварительной редакции, но в последнем релизе Cocos2d-x пока остается.

Подробности по оптимизации компиляции смотрите в наших замечаниях по оптимизации.

Источник

Сказ о Cocos2d-android

Так уж получилось, что мне пришлось портировать игру с ios. Фреймворк выбирать не пришлось, им стал Cocos2d. До момента использования фреймворка мне довелось почитать отзывы о нем и они настораживали. Но как всегда надеялся на лучшее. И так, о своем опыте портирования и применения данного фреймворка пойдет этот рассказ. Данный пост будет полезен тем, кто присматривается к Cocos2s-android.

Читайте также:  Backup all application android

Мысль о том, как должно быть

По моему скромному мнению, архитектуру любой игры нужно проектировать по наименее зависимой от платформы схеме. К примеру, используя Cocos2dx можно написать кроссплатформенную графическую часть игры(на С++) и затем с минимальными усилиями подключить ее к проекту на любой ОС, поддерживающей данный язык(Android, Symbian, Meego, Bada, про IOS не знаю, но думаю тоже). Конечно, придется столкнуться с особенностями ОС, но усилия будут меньше, чем переписывать код с одного языка на другой и сталкиваться с различиями в порте фреймворка.

Как было

А было все совсем иначе. Код был на Obj-C, пришлось портировать на Android на Java(тогда я еще не знал о хотя бы надежде в виде NDK от хабраюзера crystax). В интернете можно найти два порта Cocos2d-iphone под Android:

  1. Cocos2d-android Хм, ничего толком не скажу про этот проект. Билд от января 2010 года. Пожалуй все!
  2. Cocos2d-android-1 Данный проект утверждает на своей страничке, что проект в пункте 1 развивается слишком медленно, поэтому автор решил создать собственный. Как я понял, был форкнут проект code.google.com/p/cocos2d-android и на его основе пилится версия с приставочкой «-1». Поэтому для работы был выбран именно этот проект.

Немного об архитектуре игры и фреймворка

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

Признаюсь, игры мне раньше не доводилось разрабатывать. Был только фан-проект и то замахнулись аж на 3D. Поэтому выбранную архитектуру прокомментировать не смогу.

Игра состояла из набора слоев. Управлением и переходами между слоями управляла одна сцена. Вся игра строилась по принципу синглтона. Существует один объект, который хранит в памяти все настройки игры и загруженные данные об уровнях. Данные об уровнях хранятся в xml. Каждый раз при каждом запуске данный файл парсится и создается синглтон, который все это хранит и доступ к которому есть всегда. В проекте существует только одна активити, которая содержит немного подпиленную вьюшку GLSurfaceView:

Вцелом, типичная архитектура для андроид-приложения и ничего необычного, но в коллбэки добавлены обработчики Cocos2d. Следует отметить, что при использовании 32-битных картинок с градиентом, градиент начинает плыть. Попытки исправить это не к чему не привели. Стандартный способ для андроида(когда переопределяем метод активити onAttachedToWindow и указываем нужную цветовую палитру) не помог. Все исказилось и слетели размеры и цвета. 8-битные картинки тоже не помогли. Хм, такие дела.

Проблемы в порте фреймворка, которые вылезли

Первый трабл был описан в пункте выше, а здесь все оставшиеся.
Слой не отображается на экране. В практике использования данного фреймворка существует такая схема создания сцены:

так вот, в версии фреймворка под ios закоменченная строка есть и прекрасно работает. Я нашел решение в виде создания нового экземпляра сцены, но не факт, что это правильно.

Двигаемся дальше.
Возникла необходимость в создании кастомной вьюшки, которая будет при таче красиво перелистывать уровни игры. В IOS-версии это реализовано просто: наследуется класс от UIScrollView и добавляется поверх вьюшки, отрисовывающей графику(GLSurfaceView). У GLSurfaceView есть метод addView(). В порте под андроид такого метода нет, да и вообще пожалуй добавить свою вьюшку нельзя никак. Об этом следует помнить.

Читайте также:  Com android launcher3 что это такое

Звук. При использовании SoundEngine постоянно выскакивает IllegalStateException, который правда перехватывается. На этом пожалуй все. Хотя нет, это ппц! Создается дерево объектов исключений, оно кидается, перехватывается. Да, какая там производительность игры, о чем вы?

Белая полоса вместо картинки в слое. В игре использовались кастомные диалоги, которые представляли собой слой, добавленный поверх другого слоя. Ничего необычного. Кроме того, что порой, вместо картинок с кнопками меню выскакивала белая полоса. Код один в один как в ios-версии. Ладно бы это проявлялось на слабых устройствах, но эта штука проявляется и на топовых моделях. В issues на гуглокоде есть проблема, связанная со сборщиком мусора. Сдается мне эта относится к ней же, ибо в логах при сравнении появления данной ошибки появлялась строка со сборкой объектов сборщиком мусора. Либо руки кривые у меня(что вполне вероятно), либо порт не учитывает особенностей архитектуры Андроида.

Названия методов и классов фреймворка. Вот что меня удивило так это именование классов и методов в порте. Это веселье просто. Основные классы названы также как и в IOS-версии, но к примеру класс работы со звуком называется иначе(SoundEngine вместо SimpleAudioEngine). Методы потеряли свои приставки, не все конечно, но многие. Сидишь и гадаешь оно или не оно. Смотришь исходники и разбираешься, теряя время. Странное решение выбрал автор, ИМХО.

Поле _rotate или любое другое поле класса. Ничего особенного: полю наследуемого класса присваивается значение угла. Все идентично ios-версии, но спрайт улетал за пределы игрового поля. Несколько часов было потрачено на дебаг и прочие свистопляски. Как оказалось, подобных присваиваний следует избежать. Свойства были заменены на сеттеры и все заработало. Магия портирования да и только!

Работа алгоритма. Очень важный пункт. Логика движения главного персонажа была реализована с помощью акселерометра. Довольно стандартный прием. Но появился серьезный баг, который мешал корректному прохождению уровня. Суть в чем: Cocos2d по тику обновляет данные об игре, графику и прочее. Для этого в классе нужно написать метод: public void update( float delta ). И тут снова вступило различие в архитектуре двух ОС. Из-за задержек связанных со сборкой мусора(а она была частой, ибо много объектов, много текстур) delta была огромной и рушила весь алгоритм, что приводило просто к ужасным последствиям. Опытным путем была подобрана нужна дельта для корректной работы алгоритма и если она больше, то она просто усекалась до нужной.

Заключение

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

Да прибудет с вами сила!

UPD
По просьбе трудящихся указываю БЕСПЛАТНЫЕ фреймворки на которые стоит обратить внимание. Но есть много других. Просто эти содержат больше материалов на StackOverflow и в интернете вцелом.

Про AndEngine помнится уже была серия туториалов на Хабре. Так что самую полезную информацию поможет найти гугл и хабрапоиск.

Источник

Оцените статью