sprite-kit
SKScene
Поиск…
замечания
SKScene представляет собой единую сцену в приложении SpriteKit. SKScene «представлен» в SKView . SKSpriteNodes добавляются в сцену для реализации реальных спрайтов.
В простых приложениях может быть один SKScene, содержащий весь контент SpriteKit. Более сложные приложения могут иметь несколько SKScenes, которые представлены в разное время (например, открытая сцена, чтобы представить варианты игры, вторую сцену для реализации самой игры и третью сцену, чтобы представить результаты игры «Игра»).
Подкласс SKScene для реализации основных функций SpriteKit
Функцию SpriteKit можно реализовать в подклассе SKScene. Например, игра может реализовать основные функции игры в подклассе SKScene под названием GameScene.
В Свифт :
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Code here to setup the scene when it is first shown. E.g. add sprites. */
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch in touches {
let location = touch.locationInNode(self)
/* Code here to respond to a user touch in the scene at location */
}
}
override func update(currentTime: CFTimeInterval) {
/* Code here to perform operations before each frame is updated */
}
}
Вторичная функциональность может быть реализована в подклассах SKSpriteNodes, которые используются внутри сцены (см. Подкласс SCSpriteNode ).
Создайте SKScene, который заполняет SKView
Простой вариант - создать SKScene, который точно заполняет SKView. Это позволяет избежать необходимости рассматривать масштабирование представления для установки или установки камеры для отображения части сцены.
Следующий код предполагает, что SKView, называемый skView, уже существует (например, как определено в разделе «Создание полного экрана SKView с использованием Interface Builder» ), и был определен подкласс SKScene под названием GameView:
В Свифт :
let sceneSize = CGSizeMake(skView.frame.width, skView.frame.height)
let scene = SKScene(size: sceneSize)
skView.presentScene(scene)
Однако, если SKView может изменить размер (например, если пользователь поворачивает свое устройство, и это приводит к растяжению зрения из-за его ограничений), SKScene больше не будет соответствовать SKView. Вы можете управлять этим путем изменения размера SKScene каждый раз, когда SKView меняет размер (например, в методе didChangeSize).
Создайте SKScene, который масштабируется, чтобы соответствовать SKView
У SKScene есть параметр scaleMode, который определяет, как он изменит свой размер, чтобы он соответствовал SKView, который представлен в SKView, если он не имеет одинакового размера и / или формы.
Существует четыре варианта scaleMode:
- AspectFit : сцена масштабируется (но не растягивается) до тех пор, пока она не войдет в представление. Это гарантирует, что сцена не искажена, но могут быть некоторые области представления, которые не покрываются сценой, если сцена не такая же, как вид.
- AspectFill : сцена масштабируется (но не растягивается), чтобы полностью заполнить представление. Это гарантирует, что сцена не искажена и что изображение полностью заполнено, но некоторые части сцены могут быть обрезаны, если сцена не такая же, как у представления.
- Заполнить : сцена масштабируется (и, если необходимо, растягивается), чтобы полностью заполнить представление. Это гарантирует, что представление полностью заполнено и что ни одна из ваших сцен не обрезана, но сцена будет искажена, если сцена не такая же, как вид.
- ResizeFill : сцена не масштабируется вообще, а ее размер изменяется в соответствии с размером представления.
Следующий код предполагает, что SKView, называемый skView, уже существует (например, как определено в разделе «Создание полного экрана SKView с помощью Interface Builder» ), и был определен подкласс SKScene под названием GameView, а затем используется AspectFill scaleMode:
В Swift 3 :
let sceneSize = CGSize(width:1000, height:1000)
let scene = GameScene(size: sceneSize)
scene.scaleMode = .aspectFill
skView.presentScene(scene)
Создайте SKScene с SKCameraNode (iOS 9 и более поздние версии)
Вы можете поместить SKCameraNode в SKScene, чтобы определить, какая часть сцены показана в SKView. Подумайте о SKScene как о 2D мире с камерой, плывущей над ним: SKView покажет, что видит камера.
Например, камера может быть прикреплена к спрайту главного персонажа, чтобы следить за действием прокручивающейся игры.
SKCameraNode имеет четыре параметра, которые определяют, какая часть сцены показана:
- position : это положение камеры в сцене. Сцена создается, чтобы разместить это положение в середине SKView.
- xScale и yScale : они определяют, как сцена увеличивается в представлении. Храните эти два значения одинаковыми, чтобы избежать искажения вида. Значение 1 означает отсутствие масштабирования, значения, меньшие единицы, будут увеличиваться (чтобы спрайты выглядели больше), а значения выше 1 уменьшат масштаб (сделайте спрайты меньше).
- zRotation : это определяет, как представление поворачивается в представлении. Значение нуля не будет вращаться. Значение находится в радианах, поэтому значение Pi (3.14 ...) повернет представление вверх дном.
Следующий код предполагает, что SKView, называемый skView, уже существует (например, как определено в « Создание полного экрана SKView с помощью Interface Builder» ), и был определен подкласс SKScene под названием GameView. Этот пример просто устанавливает начальную позицию камеры, вам нужно будет переместить камеру (так же, как и другие SKSpriteNodes в сцене), чтобы прокрутить изображение:
В Swift 3 :
let sceneSize = CGSize(width:1000, height:1000)
let scene = GameScene(size: sceneSize)
scene.scaleMode = .aspectFill
let camera = SKCameraNode()
camera.position = CGPointM(x:500, y:500)
camera.xScale = 1
camera.yScale = 1
camera.zRotation = 3.14
scene.addChild(camera)
scene.camera = camera
skView.presentScene(scene)