Вступление
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 — отличный источник для поиска иллюстраций и графики для ваших игр.
1. Сцены, узлы и виды
Сцены
Первый класс, о котором вам нужно знать при работе со 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
.
2. Редактор сцен
Теперь, когда мы рассмотрели основные классы, используемые в играх SpriteKit, пришло время создать нашу самую первую сцену. В то время как сцены могут быть созданы полностью программно, XCode предоставляет превосходный инструмент редактирования сцены, который позволяет вам легко перетаскивать узлы в вашу сцену, редактируя их положение, внешний вид и другие свойства.
Откройте стартовый проект и создайте новый файл, нажав Ctrl + N или выбрав New> File … в меню File Xcode. Выберите тип файла iOS> Ресурс> SpriteKit Scene и нажмите « Далее» .
Назовите файл MainScene и сохраните его. Теперь вы должны увидеть новый файл сцены в Project Navigator .
Выберите MainScene.sks, чтобы открыть редактор сцены Xcode. На данный момент ваша сцена пуста и имеет серый фон. В нем пока нет узлов. Прежде чем добавить некоторые спрайты в вашу сцену, нам нужно сначала изменить ее размер.
В инспекторе атрибутов справа измените размер вашей сцены, чтобы иметь ширину ( W ) 320 точек и высоту ( H ) 480 точек.
Этот размер сцены соответствует наименьшему размеру экрана, на который мы нацеливаемся (3,5-дюймовый экран на iPhone 4s), чтобы мы могли правильно определять размеры наших узлов. Мы изменим размер сцены, чтобы адаптировать его к текущему размеру экрана устройства в следующем уроке.
Чтобы добавить узлы к вашей сцене, откройте библиотеку объектов справа. Возможно, вам придется щелкнуть значок, выделенный синим цветом, если библиотека объектов не отображается.
Из библиотеки объектов перетащите Цветной спрайт в середину сцены.
Откройте инспектор атрибутов справа и измените атрибуты Texture , Position и Size на следующие значения:
Ваша сцена должна теперь иметь машину посередине, как показано ниже.
Обратите внимание, что, в отличие от системы координат UIKit, в SpriteKit position
узла всегда связано с его центром от начальной точки нижнего левого угла сцены (0, 0) . Вот почему установка положения автомобиля (160, 120) размещает центр автомобиля на 160 точек слева и на 120 точек снизу вверх.
3. Отображение сцены
Когда ваша сцена завершена, откройте 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, обнаружив, когда автомобиль сталкивается с другим узлом.
Как всегда, оставляйте свои комментарии и отзывы в разделе комментариев ниже.