Быстрый тур по проекту

Приключение является одноуровневой игрой, созданной полностью с помощью платформы Набора Sprite. Вместо того, чтобы иметь необходимость поддержать многократные проекты, мы создали Приключение с помощью единственного проекта XCode, предназначающегося и для iOS и для OS X, так, чтобы все специфичные для игры классы были совместно использованы обеими платформами. В дополнение к совместно используемому игровому коду каждая цель имеет специфичные для платформы ресурсы (раскадровка и xib файлы) и классы, ответственные за установку основного контейнера приложения, готового вывести на экран сцену Приключения.

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

Символы в приключении

При игре Приключения у Вас есть выбор двух различных символов героя, воина или лучника, как показано на рисунке 2-1. Оба символа героя запускают снаряды — воин бросает молоток, лучник пускает стрелу.

Рисунок 2-1  герои воина и лучника

Когда Вы идете вокруг лабиринта, Вы сталкиваетесь с гоблинами как один показанный на рисунке 2-2. Гоблин будет автоматически искать и преследовать Ваш символ героя, пока Вы не уничтожите его со снарядом.

Рисунок 2-2  символ гоблина

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

Рисунок 2-3  полость гоблина

Наконец при достижении конца уровня Вы встречаетесь с символом босса, показанным на рисунке 2-4. Босс не перемещается от его расположения, пока Ваш герой не является соседним; тогда это преследует и атакует Вас. Как Вы могли бы ожидать, быть пораженным боссом уменьшает Ваше здоровье. Уничтожение босса заканчивает уровень и заканчивает игру.

Рисунок 2-4  символ босса уровня

Несмотря на то, что они не технически символы, Приключение также деревья функций все вокруг уровня, как показано на рисунке 2-5.

Рисунок 2-5  различные деревья в Приключении

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

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

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

Иерархия классов приключения

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

Рисунок 2-6 показывает иерархию всех совместно используемых игровых классов. Синие поля указывают абстрактные классы, разработанные, чтобы быть разделенными на подклассы; коричневые поля указывают реальные классы, которых мы инстанцируем непосредственно во время выполнения.

Рисунок 2-6  иерархия классов Приключения

Сцена

В Приключении существует только один уровень, переводящем в единственную сцену в условиях Набора Sprite, но мы разделили реализацию через два класса. APAMultiplayerLayeredCharacterScene класс является универсальным подклассом SKScene и поведение реализаций, которое было бы необходимо любой сцене в игре. Если бы Вы хотели расширить Приключение с помощью другого уровня, то Вы создали бы подкласс этого абстрактного класса сцены.

APAMultiplayerLayeredCharacterScene отслеживает проигрыватели в игре и обрабатывает ввод данных пользователем для управления героями. Это также создает основное дерево пустых узлов (дерево узла) для представления различных уровней в игре. Эти уровни диктуют порядок получения спрайтов. Например, измельченные мозаики всегда рисуются под символами, и листва всегда появляется выше всего остального. Для получения дополнительной информации о деревьях узла, посмотрите, что Дерево Узла Определяет то, Что Появляется в Сцене.

Конкретный подкласс APAMultiplayerLayeredCharacterSceneAPAAdventureScene класс — ответственен за создание специфичного для уровня содержания. В дополнение к предварительно загружению необходимых изображений, эмиттеров и кадров анимации, этот класс ответственен за определение исходного размещения всех спрайтов в уровне, включая измельченные мозаики, стены коллизии, символы и статические элементы как полости и деревья; этот процесс описан подробно в Создании Мира. APAAdventureScene также делегат физики к коллизиям в сцене, как описано в Обработке Коллизий.

Каждый раз через цикл обновления (вызванный один раз на кадр) APAAdventureScene обновления все символы в сцене, а также смещения уровня спрайтов параллакса. Для сведения к минимуму памяти и использования CPU эмиттеры частицы отключены и удалены из сцены, если они слишком далеко от героя проигрывателя по умолчанию, чтобы быть замеченными и добавленными снова, если герой добирается около достаточно. Цикл обновления обсужден подробно в Совершенствовании.

Спрайты

Все символьные и древовидные классы в Приключении происходят в конечном счете от APAParallaxSprite. Этот класс наследовался от SKSpriteNode, но добавляет дополнительное поведение параллакса, используемое полостями гоблина и деревьями.

Поскольку имя предлагает, APATree класс представляет дерево на уровне. Этот класс добавляет отдельный метод, updateAlphaWithScene:, вызванный сценой один раз на кадр. Мы используем этот метод для обновления спрайта alpha значение, делая дерево почти прозрачным каждый раз, когда герой под ним.

Символы

Все другие спрайты в Приключении наследовались от APACharacter класс, который ответственен за все перемещение основного символа и анимацию. Этот класс также добавляет дополнительное shadowBlob узел к сцене для представления тени символа и средств управления здоровье символа, инициировав смертельную последовательность, если здоровье опускается до нуля.

Для получения дополнительной информации о перемещении посмотрите Управление Символами; для получения дополнительной информации об анимации посмотрите Анимацию Символов.

Герои

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

Враги

Враги в сцене (гоблины, полости гоблина и босс уровня), все наследовались от APAEnemyCharacter класс. Этот класс расширяется APACharacter класс путем добавления сингла intelligence свойство для APAArtificialIntelligence объект, дающий этим символам их искусственный интеллект (AI).

APAArtificialIntelligence базовый класс просто отслеживает соответствующего врага, а также a target свойство это используется подклассами AI для обращения к текущей цели героя. APAEnemyCharacter обновляет объект AI каждый раз, когда символ обновляется (один раз на кадр).

Два класса, APAGoblin и APABoss, инициализируйте intelligence свойство с экземпляром APAChaseAI класс, отслеживающий позицию самого близкого героя, чтобы определить, является ли это в диапазоне атаки или преследовании. Наконец, что не менее важно, APACave класс использует APASpawnAI класс, чтобы определить, как часто полости гоблина должны генерировать новых гоблинов, снова на основе близости к самому близкому символу героя.

Проект XCode

Классы и ресурсы в проекте XCode разделены через многократные группы, чтобы упростить перейти через все различные файлы. Все специфичные для игры классы находятся в Приключении - Совместно используемая группа, поочередно содержащая группы с классами, связанными со Сценой, Спрайтами, AI, и наконец некоторыми общими графическими Утилитами, используемыми всюду по игре.

Мы использовали #pragma mark директивы в каждом классе групповых методов со связанным поведением. Это означает, что можно получить быструю схему реализации класса с помощью панели перехода, как показано на рисунке 2-7.

  Размещение кода рисунка 2-7 в исходном файле

Когда Вы хотите протестировать Приключение на различном устройстве, можно переключиться между двумя целями — iOS и OS X — при помощи раскрывающего меню Scheme, показанного на рисунке 2-1.

Рисунок 2-8  Выбирая активную цель в XCode

Классы OS X и ресурсы

Файлы для версии OS X игры находятся в Приключении - группа OS X. MainMenu.xib файл содержит единственное окно, содержащее SKView экземпляр, представление изображения для игрового логотипа, индикатор хода выполнения, показанный при загрузке активов и двух кнопок для выбора между героями лучника и воина (они имеют их альфа-набор значений к 0 в xib файле так, чтобы они были невидимы, пока не необходимый).

APAAppDelegateOSX класс обрабатывает логику, необходимую, чтобы загрузить ресурсы сцены, скрыть и показать элементы UI и добавить APAAdventureScene для дисплея SKView как описано в Создании Мира.

Права OS X установлены включить Тестовую среду приложения для игры и предоставить доступ к USB-устройствам для поддержки внешних игровых контроллеров.

Классы iOS и Ресурсы

Файлы, определенные для цели iOS, находятся в Приключении - группа iOS. Пользовательский интерфейс приложения, созданный из файла раскадровки, содержит единственный контроллер представления, который является экземпляром APAViewController класс. Представление содержания контроллера представления содержит те же элементы как окно OS X: SKView объект, представление изображения, индикатор действия и эти две кнопки.

APAViewController класс ответственен за загрузку ресурсов сцены и контакт с элементами UI, как описано в Создании Мира.

Искусство и ресурсы специальных эффектов

Приключение содержит большое количество изображений, звуков, атласов текстуры и эмиттеров частицы. Эти активы содержатся в группе Активов и совместно используются и OS X и версиями iOS игры. При расширении этой группы Вы найдете, что файлы организованы в подгруппы типом.

Атласы текстуры

Приключение использует атласы текстуры для всех текстур, включая символьные кадры анимации, мозаики, составляющие фон и изображения, используемые для элементов как деревья, полости и снаряды. Мы поместили эти изображения внутри .atlas папки; во время компиляции XCode встраивает каждую папку изображений в атлас текстуры.

Когда создано, атлас текстуры содержит по крайней мере один файл образа, имеющий многократные подызображения внутри, как показано на рисунке 2-9. Соответствие .plist файл описывает смещение, размер и вращение каждого элемента в этом файле так, чтобы Набор Sprite мог нарисовать просто соответствующую текстуру во время выполнения.

Рисунок 2-9  изображение атласа текстуры

Намного более эффективно использовать атлас текстуры, чем использовать многократные отдельные файлы, потому что Набор Sprite может графические объекты, совместно использующие тот же атлас в единственном вызове рендеринга к GPU. Например, деревья и полости все использование текстуры из атласа Среды, что означает, что они могут все быть привлечены одновременно. Если бы текстуры были в отдельных файлах, то Набор Sprite должен был бы выполнить один вызов рендеринга к GPU на группу объектов с помощью каждой текстуры.

Эмиттеры частицы

XCode предоставляет редактору эмиттера частицы, позволяющему Вам создать и скорректировать эмиттеры частицы Набора Sprite с помощью визуального интерфейса, как показано на рисунке 2-10.

Рисунок 2-10  архив эмиттера частицы

Мы создали многие эмиттеры частицы Приключения с помощью этого инструмента. Во время выполнения, каждого .sks файл разархивирован в SKEmitterNode, почти таким же способом, поскольку Интерфейсная раскадровка Разработчика разархивирована в ряд объектов.

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