LoginSignup
12
5

More than 1 year has passed since last update.

SwiftUIでSpriteKit

Last updated at Posted at 2022-11-30

Xcode-14.1 iOS-16.0

はじめに

iOS 14 から SpriteView を使って SwiftUI でもかんたんに SpriteKit が使えるようになりました:clap:

簡易実装

下記のように実装すると 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)

    }
}

こんな感じ。

オプション

SKView であった showsNodeCountshowsPhysics はイニシャライザの debugOptions 引数で設定できます。

SpriteView(scene: FirstScene(size: $0.size),
           debugOptions: [.showsNodeCount, .showsPhysics])

オプションは下記があるようです。

SpriteView.DebugOptions

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

オプションは下記があるようです。

SpriteView.Options

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

こんな感じ。

transition

SKTransition には色々あるので下記をご参考ください。

SKTransitionまとめ(Swift)

おわりに

SwiftUI でもこんな感じでかんたんに SpriteKit が使えるようになりました:tada:

snow

(クリスマス仕様ファフロッキーズ:frog:

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5