首页 > 解决方案 > Spritekit 和 swiftui,换场景更好的方式

问题描述

我编写了这几行简单的代码来使用 SpriteKit 在 Swiftui 中的 2 个场景之间进行切换,我试图了解是否有一种(更好的)不同方式可以使用按钮从一个场景切换到另一个场景。

struct ContentView: View {
    @StateObject var firstscene = FirstScene()
    @StateObject var secondscene = SecondScene()
    @State var changeScene = false
    var body: some View {
        ZStack{
            
            if changeScene {
                SpriteView(scene: firstscene)
            } else {
                SpriteView(scene: secondscene)
            }
            
            Button {
                changeScene.toggle()
            } label: {
                Text("Change")
            }
        }
    }
}

// 使用 SKscene 的子类创建的 2 个 SKScene


class FirstScene: SKScene, ObservableObject {
    let firstScene = SKScene(fileNamed: "FirstScene")
    override func didMove(to view: SKView) {
        scene?.view?.presentScene(firstScene)
    }
    
}
class SecondScene: SKScene, ObservableObject {
    let secondScene = SKScene(fileNamed: "SecondScene")
    override func didMove(to view: SKView) {
        scene?.view?.presentScene(secondScene)
    }
}


现在我的疑问是,我正在使用 var changeScene 更改 contentView 中的 SpriteView,是否可以使用另一种方法以其他方式完成相同的事情?

对任何建议持开放态度,我试图理解这个框架。

谢谢

标签: swiftswiftuisprite-kitscene

解决方案


您正在使用切换视图的标准方式。你可以像这样清理你的代码:

struct ContentView: View {
    @State var changeScene = false
    var body: some View {
        ZStack{
                SpriteView(scene: (changeScene ? FirstScene() : SecondScene())) // this is a terniary operator 
        
            Button {
                changeScene.toggle()
            } label: {
                Text("Change")
            }
        }
    }
}

新视图不需要是@StateObjects。您可以直接在视图中调用视图类型。

注意:我远离我的电脑,所以这没有经过测试。


推荐阅读