问题描述
我已经创建了一个 SpriteKit 场景文件和相应的 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
的可能解决方法。我传递了一个文件名,所以我有借口调用我的便利初始化程序。
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)
}
}
}