SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
Использование SpriteKit
в неигровых приложениях
Макс Грибов Москва, 2016
Что такое SpriteKit?
• высокоуровневый 2D framework для
создания игр
• относительно прост в использовании
• позволяет использовать визуальные
редакторы для настройки сцен /
анимации
• поддерживается всеми платформами
Apple: iOS / macOS / tvOS / watchOS
Для чего нам SpriteKit?
Макс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложениях
Базовые компоненты SpriteKit
SKView
SKScene
SKNode SKNode SKNodeSKTransition
import UIKit
import SpriteKit
class OnboardingViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let actionView = SKView()
view.addSubview(actionView)
let margins = view.layoutMarginsGuide
actionView.leadingAnchor.constraint(equalTo: margins.leftAnchor).isActive = true
actionView.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
actionView.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
actionView.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true
let myScene = SKScene(fileNamed: "OnboardingScene")
actionView.presentScene(myScene)
//...
}
}
Иерархия объектов в SKScene
SKNode
SKNode
SKNode
SKNode
SKScene
root
UIView
UIView
UIView
UIView
UIView
UIView
root
SKNode
child
Строительные блоки SpriteKit
SKNode
SKSpriteNode
SKEmitterNode
SKShapeNode
SKEffectNode
SKScene
iOS 7
SKFieldNode
SKLightNode
SK3DNode
iOS 8
SKCameraNode
SKAudioNode
SKReferenceNode
iOS 9
SKTileMapNode
SKWarpable
SKWarpGeometry
iOS 10
UIResponder
SKCropNode
SKLabelNode
SKVideoNode
SKSpriteNode
Size
mySprite.color = UIColor.blueColor()mySprite.texture = SKTexture.textureWithImageNamed(“GreenBottle”)
Anchor Point
mySprite.anchorPoint = CGPointMake(0.5, 0.5)
mySprite.size = CGSizeMake(100.0, 100.0)
SKNode
Ссылки на объекты SpriteKit
import SpriteKit
class OnboardingScene: SKScene {
var flowerSprite: SKSpriteNode
override init() {
flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage")
super.init()
addChild(flowerSprite)
}
//...
}
import SpriteKit
class BetterOnboardingScene: SKScene {
override init() {
let flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage")
flowerSprite.name = "flower"
super.init()
addChild(flowerSprite)
}
func moveFlower() {
let flower = childNode(withName: "flower")
//...
}
}
Система координат
SKScene
Y+
X+
0,0
Y-
X+
1,10,1
1,0
0.5,0.5
0,0
myScene.anchorPoint = CGPointMake(0,0)
myScene.anchorPoint = CGPointMake(0,1)
zPosition
-Z
+ZredSprite.zPosition = 0
blueSprite.zPosition = 10
secondBlueSprite.zPosition = 10secondBlueSprite.zPosition = -10
FRONT TOP
SKAction
let flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage")
let moveAction = SKAction.moveBy(x: 100.0, y: 0, duration: 1.0)
flowerSprite.run(moveAction)
flowerSprite.run(SKAction.rotate(byAngle: 45.0, duration: 1.0))
flowerSprite.run(SKAction.scale(by: 1.5, duration: 1.0))
SKAction
let boomTextureAtlas = SKTextureAtlas(named: "BoomTextureAtlas")
var boomSpriteTextures = [SKTexture]()
for textureName in boomTextureAtlas.textureNames {
boomSpriteTextures.append(boomTextureAtlas.textureNamed(textureName))
}
let boomSprite = SKSpriteNode(texture: boomSpriteTextures[5])
boomSprite.run(SKAction.animate(with: boomSpriteTextures, timePerFrame: 0.2))
SKAction
let spriteSize = CGSize(width: 100.0, height: 100.0)
let blueRectSprite = SKSpriteNode(color: UIColor.blue, size: spriteSize)
blueRectSprite.physicsBody = SKPhysicsBody(rectangleOf: spriteSize)
gravityScene.addChild(blueRectSprite)
gravityScene.physicsWorld.gravity = CGVector(dx: 0.0, dy: -9.8)
G
SKAction
Move Rotate Scale
Aimate With Textures
Move
Aimate With Textures
Rotate Scale
timeSEQUENCE
GROUP
let sequenceAction = SKAction.sequence([moveAction, rotateAction, scaleAction])
let groupAction = SKAction.sequence([sequenceAction, animateWithTexturesAction])
let secondGroupAction = SKAction.group([moveAction, SKAction.sequence([rotateAction, scaleAction]),
animateWithTexturesAction])
let hugeSequenceAction = SKAction.sequence([groupAction, secondGroupAction])
blueRectSprite.run(hugeSequenceAction)
Ссылки на ресурсы
• Session 502 Introduction to Sprite Kit WWDC 2013
• Session 503 Designing Games with Sprite Kit WWDC 2013
• Session 608 Best Practices for Building SpriteKit Games WWDC 2014
• Session 604 What's New in SpriteKit WWDC 2015
• Session 610 What's New in SpriteKit WWDC 2016
• Apple SpriteKit Programming Guide [Objective C]!

Weitere ähnliche Inhalte

Ähnlich wie Макс Грибов — Использование SpriteKit в неигровых приложениях

HTML5って必要?
HTML5って必要?HTML5って必要?
HTML5って必要?GCS2013
 
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...QAFest
 
Intro to Game Programming
Intro to Game ProgrammingIntro to Game Programming
Intro to Game ProgrammingRichard Jones
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?Ankara JUG
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2dVinsol
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin MulletsJames Ward
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLgerbille
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1Bitla Software
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Applitools
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)Oswald Campesato
 
Model View Intent on Android
Model View Intent on AndroidModel View Intent on Android
Model View Intent on AndroidCody Engel
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftGiordano Scalzo
 
Kick start with j query
Kick start with j queryKick start with j query
Kick start with j queryMd. Ziaul Haq
 
Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Korhan Bircan
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017名辰 洪
 

Ähnlich wie Макс Грибов — Использование SpriteKit в неигровых приложениях (20)

HTML5って必要?
HTML5って必要?HTML5って必要?
HTML5って必要?
 
004
004004
004
 
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...
QA Fest 2019. Алексей Альтер-Песоцкий. Snapshot testing with native mobile fr...
 
Intro to Game Programming
Intro to Game ProgrammingIntro to Game Programming
Intro to Game Programming
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
Game development with Cocos2d
Game development with Cocos2dGame development with Cocos2d
Game development with Cocos2d
 
Kotlin Mullets
Kotlin MulletsKotlin Mullets
Kotlin Mullets
 
#JavaFX.forReal()
#JavaFX.forReal()#JavaFX.forReal()
#JavaFX.forReal()
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
 
How to build a html5 websites.v1
How to build a html5 websites.v1How to build a html5 websites.v1
How to build a html5 websites.v1
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
 
Android Oreo
Android OreoAndroid Oreo
Android Oreo
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
Model View Intent on Android
Model View Intent on AndroidModel View Intent on Android
Model View Intent on Android
 
How to Clone Flappy Bird in Swift
How to Clone Flappy Bird in SwiftHow to Clone Flappy Bird in Swift
How to Clone Flappy Bird in Swift
 
Kick start with j query
Kick start with j queryKick start with j query
Kick start with j query
 
Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)Useful Tools for Making Video Games - XNA (2008)
Useful Tools for Making Video Games - XNA (2008)
 
You will learn RxJS in 2017
You will learn RxJS in 2017You will learn RxJS in 2017
You will learn RxJS in 2017
 

Mehr von CocoaHeads

Дмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPERДмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPERCocoaHeads
 
Александр Зимин – Анимация как средство самовыражения
Александр Зимин – Анимация как средство самовыраженияАлександр Зимин – Анимация как средство самовыражения
Александр Зимин – Анимация как средство самовыраженияCocoaHeads
 
Николай Ашанин – Team Lead. Структурирование мыслей
Николай Ашанин – Team Lead. Структурирование мыслейНиколай Ашанин – Team Lead. Структурирование мыслей
Николай Ашанин – Team Lead. Структурирование мыслейCocoaHeads
 
Кирилл Аверьянов — Кастомная кнопка: взгляд изнутри
Кирилл Аверьянов —  Кастомная кнопка: взгляд изнутриКирилл Аверьянов —  Кастомная кнопка: взгляд изнутри
Кирилл Аверьянов — Кастомная кнопка: взгляд изнутриCocoaHeads
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...CocoaHeads
 
Самвел Меджлумян — S3: API на Swift за пять минут
Самвел Меджлумян —  S3: API на Swift за пять минутСамвел Меджлумян —  S3: API на Swift за пять минут
Самвел Меджлумян — S3: API на Swift за пять минутCocoaHeads
 
Александр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия SwiftАлександр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия SwiftCocoaHeads
 
Катерина Трофименко — Разработка фич: от флагов до a/b-тестов
Катерина Трофименко — Разработка фич: от флагов до a/b-тестовКатерина Трофименко — Разработка фич: от флагов до a/b-тестов
Катерина Трофименко — Разработка фич: от флагов до a/b-тестовCocoaHeads
 
Андрей Володин — Как подружиться с роботом
Андрей Володин — Как подружиться с роботомАндрей Володин — Как подружиться с роботом
Андрей Володин — Как подружиться с роботомCocoaHeads
 
Александр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоАлександр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоCocoaHeads
 
Николай Волосатов — Работа с крэшами библиотек
Николай Волосатов — Работа с крэшами библиотекНиколай Волосатов — Работа с крэшами библиотек
Николай Волосатов — Работа с крэшами библиотекCocoaHeads
 
Вадим Дробинин (Vadim Drobinin) — Заботимся правильно: CareKit, HealthKit и ...
Вадим Дробинин (Vadim Drobinin) —  Заботимся правильно: CareKit, HealthKit и ...Вадим Дробинин (Vadim Drobinin) —  Заботимся правильно: CareKit, HealthKit и ...
Вадим Дробинин (Vadim Drobinin) — Заботимся правильно: CareKit, HealthKit и ...CocoaHeads
 
Александр Зимин (Alexander Zimin) — UIViewController, откройся!
Александр Зимин (Alexander Zimin) — UIViewController, откройся!Александр Зимин (Alexander Zimin) — UIViewController, откройся!
Александр Зимин (Alexander Zimin) — UIViewController, откройся!CocoaHeads
 
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...CocoaHeads
 
Михаил Рахманов — Promises, или почему обещания надо выполнять
Михаил Рахманов — Promises, или почему обещания надо выполнятьМихаил Рахманов — Promises, или почему обещания надо выполнять
Михаил Рахманов — Promises, или почему обещания надо выполнятьCocoaHeads
 
Александр Зимин — Оптимизация разработки
Александр Зимин — Оптимизация разработкиАлександр Зимин — Оптимизация разработки
Александр Зимин — Оптимизация разработкиCocoaHeads
 
Алина Михайлова — Как обойтись без менеджера в своем проекте
Алина Михайлова — Как обойтись без менеджера в своем проектеАлина Михайлова — Как обойтись без менеджера в своем проекте
Алина Михайлова — Как обойтись без менеджера в своем проектеCocoaHeads
 

Mehr von CocoaHeads (17)

Дмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPERДмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPER
 
Александр Зимин – Анимация как средство самовыражения
Александр Зимин – Анимация как средство самовыраженияАлександр Зимин – Анимация как средство самовыражения
Александр Зимин – Анимация как средство самовыражения
 
Николай Ашанин – Team Lead. Структурирование мыслей
Николай Ашанин – Team Lead. Структурирование мыслейНиколай Ашанин – Team Lead. Структурирование мыслей
Николай Ашанин – Team Lead. Структурирование мыслей
 
Кирилл Аверьянов — Кастомная кнопка: взгляд изнутри
Кирилл Аверьянов —  Кастомная кнопка: взгляд изнутриКирилл Аверьянов —  Кастомная кнопка: взгляд изнутри
Кирилл Аверьянов — Кастомная кнопка: взгляд изнутри
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
 
Самвел Меджлумян — S3: API на Swift за пять минут
Самвел Меджлумян —  S3: API на Swift за пять минутСамвел Меджлумян —  S3: API на Swift за пять минут
Самвел Меджлумян — S3: API на Swift за пять минут
 
Александр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия SwiftАлександр Зимин (Alexander Zimin) — Магия Swift
Александр Зимин (Alexander Zimin) — Магия Swift
 
Катерина Трофименко — Разработка фич: от флагов до a/b-тестов
Катерина Трофименко — Разработка фич: от флагов до a/b-тестовКатерина Трофименко — Разработка фич: от флагов до a/b-тестов
Катерина Трофименко — Разработка фич: от флагов до a/b-тестов
 
Андрей Володин — Как подружиться с роботом
Андрей Володин — Как подружиться с роботомАндрей Володин — Как подружиться с роботом
Андрей Володин — Как подружиться с роботом
 
Александр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущегоАлександр Зимин — Мобильные интерфейсы будущего
Александр Зимин — Мобильные интерфейсы будущего
 
Николай Волосатов — Работа с крэшами библиотек
Николай Волосатов — Работа с крэшами библиотекНиколай Волосатов — Работа с крэшами библиотек
Николай Волосатов — Работа с крэшами библиотек
 
Вадим Дробинин (Vadim Drobinin) — Заботимся правильно: CareKit, HealthKit и ...
Вадим Дробинин (Vadim Drobinin) —  Заботимся правильно: CareKit, HealthKit и ...Вадим Дробинин (Vadim Drobinin) —  Заботимся правильно: CareKit, HealthKit и ...
Вадим Дробинин (Vadim Drobinin) — Заботимся правильно: CareKit, HealthKit и ...
 
Александр Зимин (Alexander Zimin) — UIViewController, откройся!
Александр Зимин (Alexander Zimin) — UIViewController, откройся!Александр Зимин (Alexander Zimin) — UIViewController, откройся!
Александр Зимин (Alexander Zimin) — UIViewController, откройся!
 
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...
 
Михаил Рахманов — Promises, или почему обещания надо выполнять
Михаил Рахманов — Promises, или почему обещания надо выполнятьМихаил Рахманов — Promises, или почему обещания надо выполнять
Михаил Рахманов — Promises, или почему обещания надо выполнять
 
Александр Зимин — Оптимизация разработки
Александр Зимин — Оптимизация разработкиАлександр Зимин — Оптимизация разработки
Александр Зимин — Оптимизация разработки
 
Алина Михайлова — Как обойтись без менеджера в своем проекте
Алина Михайлова — Как обойтись без менеджера в своем проектеАлина Михайлова — Как обойтись без менеджера в своем проекте
Алина Михайлова — Как обойтись без менеджера в своем проекте
 

Макс Грибов — Использование SpriteKit в неигровых приложениях

  • 1. Использование SpriteKit в неигровых приложениях Макс Грибов Москва, 2016
  • 2. Что такое SpriteKit? • высокоуровневый 2D framework для создания игр • относительно прост в использовании • позволяет использовать визуальные редакторы для настройки сцен / анимации • поддерживается всеми платформами Apple: iOS / macOS / tvOS / watchOS
  • 8. import UIKit import SpriteKit class OnboardingViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let actionView = SKView() view.addSubview(actionView) let margins = view.layoutMarginsGuide actionView.leadingAnchor.constraint(equalTo: margins.leftAnchor).isActive = true actionView.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true actionView.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true actionView.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true let myScene = SKScene(fileNamed: "OnboardingScene") actionView.presentScene(myScene) //... } }
  • 9. Иерархия объектов в SKScene SKNode SKNode SKNode SKNode SKScene root UIView UIView UIView UIView UIView UIView root SKNode child
  • 10. Строительные блоки SpriteKit SKNode SKSpriteNode SKEmitterNode SKShapeNode SKEffectNode SKScene iOS 7 SKFieldNode SKLightNode SK3DNode iOS 8 SKCameraNode SKAudioNode SKReferenceNode iOS 9 SKTileMapNode SKWarpable SKWarpGeometry iOS 10 UIResponder SKCropNode SKLabelNode SKVideoNode
  • 11. SKSpriteNode Size mySprite.color = UIColor.blueColor()mySprite.texture = SKTexture.textureWithImageNamed(“GreenBottle”) Anchor Point mySprite.anchorPoint = CGPointMake(0.5, 0.5) mySprite.size = CGSizeMake(100.0, 100.0)
  • 13. Ссылки на объекты SpriteKit import SpriteKit class OnboardingScene: SKScene { var flowerSprite: SKSpriteNode override init() { flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage") super.init() addChild(flowerSprite) } //... } import SpriteKit class BetterOnboardingScene: SKScene { override init() { let flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage") flowerSprite.name = "flower" super.init() addChild(flowerSprite) } func moveFlower() { let flower = childNode(withName: "flower") //... } }
  • 15. zPosition -Z +ZredSprite.zPosition = 0 blueSprite.zPosition = 10 secondBlueSprite.zPosition = 10secondBlueSprite.zPosition = -10 FRONT TOP
  • 16. SKAction let flowerSprite = SKSpriteNode(imageNamed: "FlowerSpriteImage") let moveAction = SKAction.moveBy(x: 100.0, y: 0, duration: 1.0) flowerSprite.run(moveAction) flowerSprite.run(SKAction.rotate(byAngle: 45.0, duration: 1.0)) flowerSprite.run(SKAction.scale(by: 1.5, duration: 1.0))
  • 17. SKAction let boomTextureAtlas = SKTextureAtlas(named: "BoomTextureAtlas") var boomSpriteTextures = [SKTexture]() for textureName in boomTextureAtlas.textureNames { boomSpriteTextures.append(boomTextureAtlas.textureNamed(textureName)) } let boomSprite = SKSpriteNode(texture: boomSpriteTextures[5]) boomSprite.run(SKAction.animate(with: boomSpriteTextures, timePerFrame: 0.2))
  • 18. SKAction let spriteSize = CGSize(width: 100.0, height: 100.0) let blueRectSprite = SKSpriteNode(color: UIColor.blue, size: spriteSize) blueRectSprite.physicsBody = SKPhysicsBody(rectangleOf: spriteSize) gravityScene.addChild(blueRectSprite) gravityScene.physicsWorld.gravity = CGVector(dx: 0.0, dy: -9.8) G
  • 19. SKAction Move Rotate Scale Aimate With Textures Move Aimate With Textures Rotate Scale timeSEQUENCE GROUP let sequenceAction = SKAction.sequence([moveAction, rotateAction, scaleAction]) let groupAction = SKAction.sequence([sequenceAction, animateWithTexturesAction]) let secondGroupAction = SKAction.group([moveAction, SKAction.sequence([rotateAction, scaleAction]), animateWithTexturesAction]) let hugeSequenceAction = SKAction.sequence([groupAction, secondGroupAction]) blueRectSprite.run(hugeSequenceAction)
  • 20. Ссылки на ресурсы • Session 502 Introduction to Sprite Kit WWDC 2013 • Session 503 Designing Games with Sprite Kit WWDC 2013 • Session 608 Best Practices for Building SpriteKit Games WWDC 2014 • Session 604 What's New in SpriteKit WWDC 2015 • Session 610 What's New in SpriteKit WWDC 2016 • Apple SpriteKit Programming Guide [Objective C]!