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

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

Upload: cocoaheads

Post on 25-Jan-2017

69 views

Category:

Mobile


3 download

TRANSCRIPT

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

Использование SpriteKit в неигровых приложениях

Макс Грибов Москва, 2016

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

Что такое SpriteKit?

• высокоуровневый 2D framework для создания игр

• относительно прост в использовании

• позволяет использовать визуальные редакторы для настройки сцен / анимации

• поддерживается всеми платформами Apple: iOS / macOS / tvOS / watchOS

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

Для чего нам SpriteKit?

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

Базовые компоненты SpriteKit

SKViewSKScene

SKNode SKNode SKNodeSKTransition

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

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) //... } }

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

Иерархия объектов в SKScene

SKNode

SKNode

SKNode

SKNode

SKScene

root

UIView

UIView

UIView

UIView

UIView

UIView

root

SKNode

child

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

Строительные блоки SpriteKit

SKNodeSKSpriteNode

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

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

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)

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

SKNode

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

Ссылки на объекты SpriteKitimport 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") //... } }

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

Система координат

SKSceneY+

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)

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

zPosition

-Z

+ZredSprite.zPosition = 0

blueSprite.zPosition = 10

secondBlueSprite.zPosition = 10secondBlueSprite.zPosition = -10

FRONT TOP

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

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))

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

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))

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

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

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

SKAction

Move Rotate Scale

Aimate With Textures

Move

Aimate With Textures

Rotate Scale

timeSEQUENCE

GRO

UP

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)

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

Ссылки на ресурсы

• 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]!