Через некоторое время после начала разработки приложений для мобильных устройств, наступает момент, начиная с которого, хочется, чтобы приложения собирались не только под Android, но и (к примеру) под iPhone (и желательно с минимальными трудозатратами, исключающими полномасштабную портацию). Marmalade предоставляет такую возможность (за деньги, за весьма серьезные деньги :( ) Помимо этого, Marmalade предоставляет Trial версию аж на целых 90 дней, чем мы не преминем воспользоваться, чтобы разобраться, что это такое вообще и стоит ли оно тех денег, которых оно стоит?
Начнем работу с выкачивания дистрибутива и развертывания инструментальной среды Marmalade. Сам процесс установки Marmalade (во всяком случае на Windows) настолько тривиален, что я не буду на нем останавливаться. Все что требуется - установленная ранее MS Visual Studio любой разумной версии и чуть больше 1 гигабайта свободного пространства на диске. Также требуется подключение к Internet для получения триальной лицензии.
Сразу же после установки, мы становимся счастливыми обладателями инструментальной среды, в которой мы можем отлаживать наши приложения под Windows (с нормальной производительностью, а не так как это делает эмулятор Android-а) и собирать их под несколько мобильных платформ, включая Android и iOS. Также имеется весьма неплохой хелп по API, и набор примеров, включающий в себя, помимо прочего, две полноценные игры (2D тетрис и 3D гонки). Из информационных ресурсов, заслуживает упоминания Marmalade SDK Tutorials. Также, имеется несколько статей на Хабре и GameDev.
К (относительно) грустным моментам относится то, что программировать придется на C++ (стало быть придется отвыкать от всякой халявы типа сборщика мусора) и делать это придется довольно низкоуровнево. С последним можно бороться, используя какой-нибудь фреймворк. Разумеется, можно поискать готовый, но (помимо других) у него заведомо будет фатальный недостаток - он написан не нами !!!
Собственно от фреймворка нам требуется не так много и, чтобы это осознать, полезно составить список функциональных требований. Итак, он должен:
- Быть событийно-ориентированным и, в том числе, поддерживать отложенные события (выполняющиеся через заданное количество миллисекунд)
- Поддерживать анимацию 2D-спрайтов, включающую их плавное перемещение, масштабирование и циклическое изменение картинки
- Поддерживать одновременную анимацию нескольких спрайтов
- Обрабатывать события touchPad-а (с корректной обработкой MultiTouch) и клавиатуры
- Поддерживать управление проигрыванием фоновой музыки и звуковыми эффектами (в том числе с проигрыванием нескольких звуков одновременно)
В нем имеется множественное наследование (мало того, в нем имеется diamond problem) и я этим совсем не горд :( Тем не менее, по другому у меня не получилось. Будем держать в голове, что эта проблема нам еще не раз аукнется и продолжим жить дальше. Рассмотрим основные моменты нашего дизайна:
Класс
|
Назначение
|
IObject
|
Интерфейс работы с
событиями
|
IScreenObject
|
Интерфейс объекта,
имеющего экранное отображение
|
ISprite
|
Интерфейс спрайта
|
IAnimatedSprite
|
Интерфейс
анимированного спрайта
|
ISpriteOwner
|
Интерфейс контейнера,
содержащего набор спрайтов
|
AbstractScreenObject
|
Абстрактная реализация
экранного объекта
|
Sprite
|
Реализация спрайта,
предоставляющего возможности по отображению изображения его, перемещению,
масштабированию и пр.
|
Background
|
Фоновое изображение
|
AnimatedSprite
|
Реализация
анимированного спрайта, включающая обработку системных событий, а также
управлением отображения различных картинок, в зависимости от состояния
спрайта
|
AbstractSpriteOwner
|
Абстрактная реализация
контейнера спрайтов
|
CompositeSprite
|
Реализация составного
спрайта, которым можно управлять как единым целым
|
Scene
|
Описание сцены,
представляющей собой набор загруженных спрайтов
|
Desktop
|
Синглтон,
предоставляющий информацию о физических размерах экрана устройства и
управляющий отображением текущей сцены
|
Locale
|
Системный класс,
предоставляющий информацию о локализации
|
Более подробно эти, и другие, классы мы рассмотрим в следующих статьях, в которых приступим к реализации фреймворка.
К (относительно) грустным моментам относится то, что программировать придется на C++... Что за бред? Это наоборот отлично что не на яве, NET и т.п. мути а на С++!
ОтветитьУдалитьЛично мне C++ тоже нравится больше, но я лично знаю людей, которым больше нравится Ява (для них C++ относительно грустен)
УдалитьВообще-же имелась в виду отличие от предыдущего цикла статей, в котором разработка велась на Java