はじめに
iOS 14 から SpriteView を使って SwiftUI でもかんたんに SpriteKit が使えるようになりました
簡易実装
下記のように実装すると SKScene
を表示できます。
struct ContentView: View {
var body: some View {
GeometryReader {
SpriteView(scene: FirstScene(size: $0.size))
}
}
}
final class FirstScene: SKScene {
override func didMove(to view: SKView) {
backgroundColor = .systemRed
let text = SKLabelNode(text: "First")
text.position = view.center
addChild(text)
}
}
こんな感じ。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F204613647-1e206795-f0ac-467d-bdd7-e427df56783e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5eb00bc42d0939b89a8a292242b16c13)
オプション
SKView
であった showsNodeCount
や showsPhysics
はイニシャライザの debugOptions
引数で設定できます。
SpriteView(scene: FirstScene(size: $0.size),
debugOptions: [.showsNodeCount, .showsPhysics])
オプションは下記があるようです。
static let showsDrawCount: SpriteView.DebugOptions
static let showsFPS: SpriteView.DebugOptions
static let showsFields: SpriteView.DebugOptions
static let showsNodeCount: SpriteView.DebugOptions
static let showsPhysics: SpriteView.DebugOptions
static let showsQuadCount: SpriteView.DebugOptions
SKView
であった allowsTransparency
などはイニシャライザの options
引数で設定できます。
SpriteView(scene: FirstScene(size: $0.size),
options: [.shouldCullNonVisibleNodes, .allowsTransparency])
オプションは下記があるようです。
static let allowsTransparency: SpriteView.Options
static let ignoresSiblingOrder: SpriteView.Options
static let shouldCullNonVisibleNodes: SpriteView.Options
遷移処理
SKScene
の遷移処理は下記のように SKScene
側でやればできます。
final class FirstScene: SKScene {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view?.presentScene(SecondScene(size: size), transition: .doorway(withDuration: 2.0))
}
}
こんな感じ。
SKTransition
には色々あるので下記をご参考ください。
おわりに
SwiftUI でもこんな感じでかんたんに SpriteKit が使えるようになりました
(クリスマス仕様ファフロッキーズ)