Методы наиболее успешной практики набора Sprite

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

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

Организуйте игровое содержание в сцены

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

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

Сцены не имеют поведения по умолчанию, как раскадровки делают в традиционном приложении для iOS. Вместо этого Вы определяете и реализуете способы поведения для сцен. Эти способы поведения включают:

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

Позвольте Вашим проектам сцены развиваться

Как правило, новая сцена будет разработанной шаг за шагом. В запуске Вы могли бы работать с тестовыми приложениями и экспериментальными идеями понять, как работает Набор Sprite. Но позже, поскольку Ваша игра становится более сложной, Ваши сцены должны адаптироваться.

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

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

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

Ограничьте содержание дерева для улучшения производительности

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

Как правило, узел должен быть частью дерева узла потому что:

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

  • Узел выполняет действия, требующиеся для точного геймплея.

  • Узел имеет организацию физики, требующуюся для точного геймплея.

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

Как правило, проект Вашего алгоритма отбора основывается на Вашем геймплее. Например:

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

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

Когда содержание всегда будет быть добавленным и удаленным сразу, рассмотрите использование временного объекта узла для сбора ряда содержания. Содержание может быть довольно сложным, и все же быть добавлено к сцене с вызовом отдельного метода.

Что не должно быть в сцене

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

  • Логика содержания или приложения совместно используется многократными сценами.

  • Логика содержания или приложения является особенно дорогой для установки и только должна быть выполнена один раз.

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

Используйте разделение на подклассы для создания собственных способов поведения узла

Разработка новых игр требует, чтобы Вы сделали подклассы SKScene класс. Однако другие классы узла в Наборе Sprite также разработаны, чтобы быть разделенными на подклассы так, чтобы можно было добавить пользовательское поведение. Например, Вы могли бы разделить на подклассы SKSpriteNode класс для добавления логики AI, определенной для игры. Или, Вы могли бы разделить на подклассы SKNode класс для создания класса, реализующего определенный уровень получения в сцене. И если Вы хотите непосредственно реализовать интерактивность в узле, необходимо создать подкласс.

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

Вот важные инструкции для следования при создании собственных подклассов:

Рисование Вашего содержания

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

Рассмотрите следующий совет при разработке дерева узла:

Работа с игровыми данными

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

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

Лучшее место, чтобы хранить игровые данные зависит от того, где те данные используются в Вашей игре. Для данных, не связанных с Набором Sprite, список свойств, сохраненный в Вашем комплекте приложений, является хорошим решением. Однако для данных Набора Sprite, у Вас есть другая опция. Поскольку вся архивация поддержки классов Набора Sprite, можно просто создать архивы важных объектов Набора Sprite и затем включать эти архивы в игру. Например, Вы могли бы:

Вот несколько инструкций для работы с архивами: