Диплом: Реализация раздела "Транслейты" для кроссплатформенного приложения "Английский Puzzle Inglish" Cocos2d-x

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
32
Public определяет открытый доступ к членам, private позволяет доступ
только функциям-членам своего класса, protected доступны функциям-
членам своего класса, а также классов-наследников.
Рассмотрим Рис. 13:
В заголовочном файле TranslatesAPIManager.h создается объект класса
структура TranslateInfo с модификатором доступа public. Модификатор
доступа public позволяет обращаться к структуре из любой части программы,
используя оператор расширения области видимости.
Рис. 13. Пример объекта класса.
Для обращения к этому объекту необходим метод класса
TranslatesAPIManager (например, широко используемая связка сеттер-геттер).
33
Полиморфизм и перегрузка.
Полиморфизм является одной из основных парадигм ООП и
заключается в различном использовании функций или операций, в
зависимости от того, с какими типами данных они работают. Т.е. объект
может использовать метод производного класса, на момент создания
базового еще не существующего, или программист самостоятельно делает
нужные операторы методами нужного класса, чем определяет действия
операторов. Когда существующая операция наделяется возможностью
действовать с новым типом данных, она становится перегруженной.
Повторное использование кода.
Используя C++ при написании программы, благодаря свойствам ООП,
повторное использование кода становится удобной и простой практикой.
Опираясь на механизм наследования, разработчик может скопипастить уже
ранее реализованный класс и расширить его по мере надобности.
Лямбда выражения.
Стандарт C++11 допускает использование лямбда выражений –
безымянных функций, не требующих объявления класса. Это просто
приятный вспомогательный момент, позволяющий писать код более
компактно. Достаточно часто используемая фича (в т.ч. в реализации раздела
«Транслейтов»), достойная упоминания. Возможно сохранение лямбды в
переменную или подавать на вход функции, как параметр.
2.3. Особенности Cocos2d-x
Cocos2d представляет собой т.н. движок для создания игр и других
графических интерактивных приложений, использующий OpenGL для
аппаратного ускорения графики. Со временем появились различные бранчи:
Cocos2d-ObjC, Cocos2d-x, Cocos2d-html5 и Cocos2d-XNA, Cocos2d-JS.
34
Выбор бранча Cocos2d-x для работы над приложением обусловлен
обеспечением возможности создания приложения для различных
платформ(iOS, Android, Windows Phone 7 (XNA), BlackBerry, Tizen, Bada,
Marmalade, Windows, Linux), типом приложения(2D графика), достаточно
широкой распространенностью (свои приложения на движке представляют
такие крупные компании как Zynga, Konami, Disney Mobile), С++, а так же
Cocos2d-x предоставляет простой API.
Преимущества Cocos2d:
- Бесплатен;
- Открытый исходный код;
- Скрывает низкоуровневые технические детали
реализации(графическая составляющая легко реализуется путем
оперирования с простыми спрайтовыми классами);
- В силу популярности поддерживается множеством фреймворков;
- Полностью кросс-платформенный (реализована даже поддержка
внутриигровых покупок сразу для IOS и Android);
- Поддержка стандарта C++ 11 с версии 3(лямбды, auto);
- Возможность самостоятельного создания GUI-элементов;
- Широкие возможности API;
- Ряд других фич, которые не используются в нашем проекте, но
полезны (поддержка акселерометра, работа с физикой, 3d графикой
и проч.);
35
Основные понятия Cocos2d-x.
Аппроксимируя, можно сказать, что Cocos2d-x предоставляет набор
инструментов для создания базовых объектов и управления ими, однако
возможности движка простираются за пределы разработки игр предоставляя
фичи для создания приложений в целом. Будучи движком для создания игр,
кокос, включает множество компонентов, которые при совместном
использовании существенно упрощают жизнь разработчику и сокращают
время работы. Среди них: рендеринг, графика, детект столкновений,
поддержка контроллера, физический и звуковой движки, анимимацию и
прочее. Кокос предоставляет упрощенный API для кросс-платформенной
разработки, что позволяет сосредоточиться на создании, а не поддержке. В
этом разделе будет приведено максимально краткое, но емкое описание
основных особенности и приемов применения этих инструментов.
Главные компоненты Cocos2d
Director.
Класс, отвечающий за создание главной сцены приложения и
определяющий, как и когда создаются остальные сцены, т.е. здесь
осуществляется контроль над потоком операций, объектам воздействия
сообщается что, как и когда делать. Здесь же осуществляется настройка
ориентации и инициализация контекста OpenGL. Директор реализуется через
паттерн синглтон (что гарантирует наличие одного экземпляра класса и
глобальную точку доступа к нему) => вызывается из любой части программы
путем Director::getInstance()->methodName();
Директор отвечает за транзит сцен путем манипулирования со стэком
сцен. Стек устроен по принципу FI-LO (first in last out), т.е. рабочей сценой
оказывается последняя, добавленная в стэк, а работа с предыдущей
приостанавливается. Для управления процессами используются методы
push(), pop() и replaсe(). Director::pushScene приостанавливает выполнение
текущей сцены и выталкивает новую, перемещая ее вверх стэка.
36
Director::popScene удаление текущей сцены (возврат к предыдущей,
приостановленной сцене). Director::replaceScene прекращает выполнение
текущей сцены, заменяя ее новой.
Node.
Нод(англ. Node, Узел) - это базовая сущность движка, свойства которой
могут быть изменены программистом. Почти все элементы, используемые
при создании проекта на кокосе, являются порожденными от класса Node.
Нод также является базовым элементом графа сцены (Scene Graph). Наиболее
распространенными объектами Node являются: Scene, Layer, Sprite, Menu,
Label.
Основные характеристики, свойственные нод-объектам:
Нод-объекты могут содержать другие нод-объекты, т.е. быть
родителями (управляется функциями-членами такими как addChild,
getChildByName, removeChildFromParent и т.д.).
Могут планировать периодический обратный вызов (schedule,
unschedule и т.д.),
Могут выполнять действия - Actions (runAction, stopAction и т.д.),
Основные свойства нод-объекта:
- Позиция – position: определяет местоположение нода на сцене или на
родителе (по умолчанию: x = 0, y = 0);
- Масштаб, скейлинг – scale: масштабирует нод (по умолчанию: x = 1, y
= 1);
- Поворот – rotate: определяет наклон нода в градусах, по часовой
стрелке (по умолчанию: 0);
- Опорная точка, Якорь - anchor point: точка на ноде, по которой
производится позиционирование или вращение (по умолчанию: x = 0, y
= 0 – нижний левый угол);
37
- Размер – content size: определяет размер нода (по умолчанию: ширина -
width = 0, высота - height = 0);
- Видимость - visible (по умолчанию: true, иначе – объект существует, но
визуально незаметен).
Рис.14. Древо объектов Cocos2d-x.
38
Sprites.
Одним из основных понятий и главных рабочих объектов клиента в
кокосе является спрайт (CCSprite). Спрайт – элемент компьютерной графики,
используемый для отображения объектов на сцене (в данной работе это
двумерные изображения).
Существует несколько способов создания спрайта:
Создание спрайта при помощи изображения-источника
различных графических форматов (PNG, JPEG, TIFF и проч.):
auto mySprite = Sprite::create("source.png"); При таком способе
создаваемый спрайт имеет габариты ресурса.
Создание с использованием прямоугольной части изображения
источника. Происходит посредством уточнения начальных
координат, длинны и ширины интересующей части : auto
mySprite = Sprite::create("source.png", Rect(_originX, _originY,
_width, _height)); (отсчет происходит от верхнего левого угла;
при указании rect(0, 0, 100, 50) ,будет выбран прямоугольник
размером 100 на 50 пикселей в левом верхнем углу источника).
Спрайты можно объединять в sprite sheet (полотно): несколько
спрайтов будут объединены в один. Использование полотен позволяет
повысить производительность путем пакетной обработки вызовов
отрисовки. Полотно полностью загружается в класс кеш-менеджер
(SpriteFrameCache) для обеспечения более быстрого доступа при
последующих обращениях.
После создания спрайта разработчик может производить множество
манипуляций с объектом через свойства CCSprite. Наиболее
распространенные из них:
- Установка анкорпоинта (якоря) : mySprite->setAnchorPoint(_x, _y);
Дефолтно _x и _y = 0.5 (т.е. посередине спрайта).
39
- Установка положения спрайта на другом нод-объекте :
- mySprite->setPosition(Vec2(_x, _y)); Vec2 – двумерная система
координат, имеющая начало внизу слева.
- Установка положения вертикали спрайта относительно вертикали
сцены (проще говоря, наклон): mySprite->setRotation(-_x);
положительное число означает поворот по часовой стрелке, и
наоборот.
- Масштабирование: mySprite->setScale(_x); Доступен
масштабирование по одной из осей.
На описанные выше свойства влияет расположение
якоря(AnchorPoint), ниже приведу пару примеров свойств, не зависящих от
положения якоря:
- Установка цвета (например, если исходное изображение белого цвета,
а мы хотим спрайт зеленого цвета): mySprite-
>setColor(Color3B::GREEN); Color3B – палитра RGB, можно
указывать цвета в стандартных диапазонах – (255, 255, 255) белый.
- Установка прозрачности спрайта: mySprite->setOpacity(_x);
- 0 <=_x<=255, если значение равно нулю, спрайт полностью невидим.
Scene и scene graph.
Сцена (Scene) дочерний класс CCNode, являющий собой абстракцию -
контейнер, на котором (scene->addChild(node)) размещены прочие нод-
объекты, такие как Label или Sprite и прочие, необходимые для работы с
приложением. Для реализации приложения разработчику придется создать
хотя бы одну сцену. Созданная сцена будет являться родителем для прочих
нодов, помещенных на нее.
Scene graf в кокосе - это структура данных, отвечающая за
организацию графической сцены в древовидную структуру, реализующую
рендеринг объектов в установленном порядке. Обход древо осуществляется с
40
корня, через левую часть, затем – правая часть, и возвращение к корню.
Элемент слева имеет отрицательный атрибут z-order, а правая –
положительный по умолчанию. Изменяя этот атрибут вручную при создании
нод-объектов, разработчик влияет на финальный вариант отрисовки сцены.
Упрощая структуру сцены приведу иллюстрацию:
Рис.15. Обход графа сцены.
Рассмотрим рис. 15: помещая на сцену(SCENE) лейер(background),
лейблы(text0, text1) и спрайты(sprite0, sprite1, sprite2) без указания прочих
родителей, кроме сцены(this) и не изменяя атрибут z-order, мы получим
отрисовку в следующем порядке: background  text0  text1  sprite0
sprite1 sprite2, причем более поздние нод-объекты могут, в зависимости от
указанных позиций и размеров, перекрыть ранее отрисованные ранее. При
этом можно указать какому-либо ноду z-order=1 (а прочим z-order=0), и он
окажется поверх остальных.
Actions.
Любые нод-объекты могут выполнять действия. Экшны позволяют
изменять свойства нод-объектов с течением времени. Например, изменять
положение на сцене. Важно понимать, что экшн это тоже объект: для
41
применения его нужно создать. В кокосе используется декартова система
координат(Vec(0, 0) – левый нижний угол сцены).
Многие экшны, помимо стандартного выполнения, имеют два
дополнительных варианта реализации: By и To. By – выполняется
относительно текущего положения нода на сцене, а To выполняется в
абсолютном вычислении(не зависит от текущего положения нода). Приведу
несколько примеров распространенных экшнов:
- Move – позволяет изменять положение объекта на сцене; mySprite->
moveTo::create(5, (Vec2(_X, _Y)); этот экшн-объект переместит
mySprite в позицию с координатами _Х,_У за 5 секунд.
- Rotate – позволяет вращать объект вокруг анкор-поинта; auto
rotateBy = RotateBy::create(f, _Уf); это создаст экшн-объект,
который изменит свойство rotation нод-объекта, к которому будет
применено: за _Х секунд нод будет повернут на _У радиан;
- Fade – изменяет свойство opacity (меняет прозрачность); auto fadeIn =
FadeIn::create(_Хf); Объект визуально пропадает со сцены в течение
сек;
- Follow – создает экшн-объект, реализующий движение обного нода за
другим: camera->runAction(Follow::actionWithTarget(mySprite));
Кокос предоставляет крайне широкий набор различных объектов-
экшнов, благодаря которому возможна реализация, по сути, любых
замыслов. Однако, это еще не все: движок также предоставляет механизм по
созданию последовательностей друг-за-другом выполняющихся действий
или набором из действий выполняемых синхронно: sequence и spawn,
соответственно. Для использования таких возможностей нужно создать ряд
экшн-объектов, затем создать экшн-объект sequence или spawn, и поместить в
них созданные экшны(auto seqcuence = Sequence::create(fadeOut, rotate, move,
removeFromParent, nullptr);).

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран