每当我的文本视图更新时,我的 GameScene 都会重新加载

My GameScene reloads whenever my Text view updates

我有一个 SwiftUI/SpriteKit 项目。

我正在使用 SwiftUI SpriteView 来显示我的 GameScene

每当 mainData.numOfBallsInCup 增加时,它都会更新 Text 视图。

问题如下:更新 Text 视图时,会导致重新加载 GameScene。 GameScene的sceneDidLoad()每次运行,场景回归初始状态

我的ContentView是这样的:

import SwiftUI
import SpriteKit

struct ContentView: View {
    @EnvironmentObject var mainData: MainData
    
    var body: some View {
        GeometryReader { geo in
            Group {
                if mainData.showSpriteScene {
                    SpriteView(scene: GameScene(), transition: SKTransition.reveal(with: .down, duration: 1.0))
                        .ignoresSafeArea()
                    VStack {
                        Text("\(mainData.numOfBallsInCup)")
                            .foregroundColor(Color.white)
                        Text("BALLS")
                            .foregroundColor(Color.white)
                    }
                        .position(x: geo.size.width * 0.5, y: geo.size.height * 0.06)
                }
            }
        }
    }
}

如何在不重新加载 GameScene 的情况下更新 Text 视图?

场景是一个模型,您在每次更新时创建新场景(在调用中),因此 SpriteView 认为它应该重建。

尝试以下操作:

struct ContentView: View {
    @EnvironmentObject var mainData: MainData
    
    @State private var scene = GameScene()  // << here, or put in MainData !!

    var body: some View {
        GeometryReader { geo in
            Group {
                if mainData.showSpriteScene {
                    SpriteView(scene: scene,    // << here !!
                               transition: SKTransition.reveal(with: .down, duration: 1.0))
                        .ignoresSafeArea()