我正在玩 SpriteView,效果很好。但是我不知道如何与 Spritekit GameScene 共享一个类,这是在我的视图中实例化的。与其他观点分享我的课程就像一种魅力。但是如何从 spritekit 的 GameScene 访问我的 gameCenterManager 类,如何通过该类?我不知道如何做到这一点。我考虑过制作一个全球可访问的课程,但这不是我想要的。
目标是能够从 GameScene 内部发送和接收数据以更新玩家位置等。但是匹配发生在 SwiftUI 视图中,这也是创建类的地方。
gameCenterManger 类是这样创建的;
struct ContentView: View {
@StateObject var gameCenterManager = GameCenterManager()
var body: some View {
...
etc
课程设置如下:
class GameCenterManager: NSObject, ObservableObject {
//lots of stuff going on
...
}
并共享到将创建 SpriteView 的 GameSceneView 视图,如下所示:
Button("Show Sheet") {
self.showingSheet.toggle()
}
.buttonStyle(RoundedRectangleButtonStyle())
.buttonStyle(ShadowButtonStyle())
.fullScreenCover(isPresented: $showingSheet, content: { GameSceneView(gameCenterManager:self.gameCenterManager)})
最后,在我的 GameSceneView 中,配置了 SpriteView 的 GameScene。
struct GameSceneView: View {
var gameCenterManager: GameCenterManager
@Environment(\.presentationMode) var presentationMode
var scene: SKScene {
let scene = GameScene()
scene.size = CGSize(width: UIScreen.main.bounds.size.width , height: UIScreen.main.bounds.size.height)
scene.scaleMode = .fill
return scene
}
var body: some View {
Button("Dismiss") {
self.presentationMode.wrappedValue.dismiss()
}
Button("send data") {
gameCenterManager.increment()
}
SpriteView(scene: scene )
.frame(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - 200 )
.ignoresSafeArea()
.overlay(ImageOverlay(), alignment: .bottomTrailing)
}
}