SKScene与SpriteView中的绑定



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

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

我想要这样的东西:

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

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

使用ObservableObject订阅foo的可能解决方案。我传递了一个fileName,这样我就有借口调用我的方便初始化器。

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

最新更新