SpriteView和normal View之间的通信



我目前正在做一个项目,我使用SpriteView来显示游戏内容,使用普通视图来显示菜单和导航。我能够在正常视图中按下按钮时创建和加载SpriteViews,但通信不以其他方式工作。我希望能够通过使用子SpriteView-Element的按钮/SKShapeNodes来改变父View-Element中的状态变量。

我尝试在两个实例之间绑定变量并使用回调函数。但是我无法更改View-Element中的任何内容。

是否有一种简单有效的方法从子- spriteview发送请求到父- view ?

您可以使用ObservableObject-@Published模式。

让你的GameScene符合ObservableObject协议,并发布你感兴趣的属性,将值发送到SwiftUI视图,像这样:

class GameScene: SKScene, ObservableObject {
@Published var updates = 0
@Published var isPressed = false
// ...
}

然后,在你的SwiftUI视图中,使用@StateObject属性(或@ObservedObject@EnvironmentObject)来存储GameScene实例。然后你可以在你的SwiftUI视图中使用GameScene的发布属性:

struct ContentView: View {
@StateObject private var scene: GameScene = {
let scene = GameScene()
scene.size = CGSize(width: 300, height: 400)
return scene
}()

var body: some View {
ZStack {
SpriteView(scene: scene).ignoresSafeArea()
VStack {
Text("Updates from SKScene: (scene.updates)")
if scene.isPressed {
Text("isPressed is true inside GameScene")
}
}
}
}
}

当你"按下普通视图中的按钮"时,改变已发布属性的值,它们会改变使用它们的SwiftUI视图。

相关内容

  • 没有找到相关文章

最新更新