0

我创建了一个 SpriteKit 场景文件和相应的SKScene对象。该场景对象包括一个@Binding属性。

当我SpriteView在我的 SwiftUI 文件中使用时,我不知道如何初始化场景,以便它从 sks 文件加载并分配绑定。

我想要这样的东西:

class MyScene: SKScene {
    @Binding var foo: CGFloat

    init(foo: Binding<CGFloat>) {
      _foo = foo
      super.init(fileNamed: "MyScene")
    }
}

但这不起作用,因为init(fileNamed:)它是一个方便的初始化程序,而不是指定的初始化程序。

4

1 回答 1

0

一种可能的解决方法ObservableObject,用于订阅foo. 我传递了一个文件名,所以我有理由调用我的便利初始化程序。

class MyScene: SKScene, ObservableObject {
    @Published var foo: CGFloat = 0

    convenience init(fileName: String) {
      self.init(fileNamed: fileName)!
    }
}

然后在您的视图(或其他地方)上引用它。

struct MyView: View {

    @ObservedObject var scene = MyScene(fileName: "MyScene")

    var body: some View {
        VStack {
            FooView($scene.foo)
            SpriteView(scene: scene)
        }
    }
}
于 2021-02-15T05:52:28.603 回答