Статьи

SpriteKit с нуля: основы

SpriteKit, доступный в iOS, tvOS и OS X, является платформой, которая позволяет разработчикам создавать высококачественные 2D-игры, не беспокоясь о сложностях графических API, таких как OpenGL и Metal. Помимо обработки всей графики для разработчиков, SpriteKit также предлагает широкий спектр дополнительных функций, включая физическое моделирование, воспроизведение аудио / видео и сохранение / загрузку игр.

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

Эта серия требует, чтобы вы работали с Xcode 7.3 или выше, который включает поддержку Swift 2.2, а также SDK для iOS 9.3, tvOS 9.2 и OS X 10.11.5. Вам также необходимо скачать стартовый проект с GitHub , который содержит визуальные ресурсы, которые будут использоваться в игре, и несколько строк кода, которые помогут нам начать работу.

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

Первый класс, о котором вам нужно знать при работе со SpriteKit, — это класс SKScene . Для любой 2D-игры, созданной с помощью SpriteKit, вы разбиваете содержимое игры на несколько сцен, каждая из которых имеет собственный подкласс SKScene .

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

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

  • position ( CGPoint )
  • xScale ( CGFloat ): представляет горизонтальный масштаб узла
  • yScale ( CGFloat ): аналогично xScale но вместо этого действует в вертикальном направлении
  • alpha ( CGFloat ): представление прозрачности узла
  • hidden ( Bool ): значение, определяющее, должен ли узел быть видимым
  • zRotation ( CGFloat ): представляет угол в радианах, что узел должен быть повернут
  • zPosition ( CGFloat ): используется для определения того, какие узлы должны отображаться поверх других узлов сцены

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

Так же, как вы можете добавить подпредставления к любому объекту UIView в UIKit, в SpriteKit вы можете добавить любое количество дочерних объектов. узлы к существующему узлу. Это делается с помощью метода addChild(_:) для любого объекта SKNode .

Также как и объекты UIView , свойства положения и масштаба любого дочернего узла относятся к родительскому узлу, к которому он добавлен. Вот как объект SKScene , являющийся подклассом SKNode , может выступать в качестве корневого узла вашей сцены. Для любых узлов, которые вы хотите в вашей сцене, вам нужно добавить их как дочерние элементы самой сцены, используя метод addChild(_:) .

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

  • SKSpriteNode : берет изображение и создает текстурированный спрайт в вашей сцене
  • SKCameraNode : контролирует, откуда просматривается ваша сцена
  • SKLabelNode : отображает текстовую строку
  • SKEmitterNode : используется вместе с системой частиц для визуализации эффектов частиц
  • SKLightNode : создает эффекты освещения и тени в вашей сцене

В этой серии мы используем эти типы узлов, а также некоторые другие, менее распространенные.

Чтобы отобразить содержимое SpriteKit в работающем приложении, вам необходимо использовать класс SKView . Это подкласс UIView (или NSView на OS X), который можно легко добавить в любую часть вашего приложения. Чтобы представить сцену SpriteKit, необходимо вызвать метод presentScene(_:) или presentScene(_:transition:) в экземпляре SKView . Второй метод используется, когда вам нужна пользовательская анимация или переход на новую сцену.

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

Есть также несколько свойств, которые полезны при отладке игры и могут отображать такую ​​информацию, как текущий FPS (количество кадров в секунду), количество узлов и физические поля в вашей сцене. Если вы хотите взглянуть на все доступные свойства, посмотрите SKView класс SKView .

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

Откройте стартовый проект и создайте новый файл, нажав Ctrl + N или выбрав New> File … в меню File Xcode. Выберите тип файла iOS> Ресурс> SpriteKit Scene и нажмите « Далее» .

Файл сцены SpriteKit

Назовите файл MainScene и сохраните его. Теперь вы должны увидеть новый файл сцены в Project Navigator .

Файл MainScene

Выберите MainScene.sks, чтобы открыть редактор сцены Xcode. На данный момент ваша сцена пуста и имеет серый фон. В нем пока нет узлов. Прежде чем добавить некоторые спрайты в вашу сцену, нам нужно сначала изменить ее размер.

В инспекторе атрибутов справа измените размер вашей сцены, чтобы иметь ширину ( W ) 320 точек и высоту ( H ) 480 точек.

Размер сцены

Этот размер сцены соответствует наименьшему размеру экрана, на который мы нацеливаемся (3,5-дюймовый экран на iPhone 4s), чтобы мы могли правильно определять размеры наших узлов. Мы изменим размер сцены, чтобы адаптировать его к текущему размеру экрана устройства в следующем уроке.

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

Библиотека объектов

Из библиотеки объектов перетащите Цветной спрайт в середину сцены.

Пустой цвет спрайт

Откройте инспектор атрибутов справа и измените атрибуты Texture , Position и Size на следующие значения:

Sprite Properties

Ваша сцена должна теперь иметь машину посередине, как показано ниже.

Автомобиль в сцене

Обратите внимание, что, в отличие от системы координат UIKit, в SpriteKit position узла всегда связано с его центром от начальной точки нижнего левого угла сцены (0, 0) . Вот почему установка положения автомобиля (160, 120) размещает центр автомобиля на 160 точек слева и на 120 точек снизу вверх.

Когда ваша сцена завершена, откройте ViewController.swift и добавьте оператор импорта для платформы SpriteKit вверху. Это позволяет нам использовать классы SpriteKit и API в ViewController.swift .

1
2
import UIKit
import SpriteKit

Затем обновите реализацию метода viewDidLoad() класса ViewController следующим образом:

1
2
3
4
5
6
7
8
override func viewDidLoad() {
    super.viewDidLoad()
     
    let skView = SKView(frame: self.view.frame)
    let scene = SKScene(fileNamed: «MainScene»)
    skView.presentScene(scene)
    view.addSubview(skView)
}

С помощью этого кода мы сначала создаем экземпляр SKView , который имеет тот же размер, что и представление контроллера представления. Затем мы загружаем нашу сцену из файла, который мы создали с помощью инициализатора SKScene(fileNamed:) . Мы заставляем экземпляр SKView представить эту сцену, а затем добавляем ее в качестве подпредставления к основному виду.

Выберите симулятор iPhone 4s (чтобы наша сцена имела правильный размер для экрана) и создайте и запустите ваше приложение. Вы должны увидеть экран, подобный следующему:

Сцена внутри приложения

В этом первом руководстве по SpriteKit From Scratch вы узнали основы представлений, сцен и узлов в SpriteKit. Вы создали базовую сцену с одним спрайтом, используя редактор сцен, встроенный в XCode, что делает создание сцен намного проще по сравнению с выполнением всего этого программно.

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

Как всегда, оставляйте свои комментарии и отзывы в разделе комментариев ниже.