swift - 每当我的 TextView 更新时,我的 GameScene 都会重新加载

标签 swift swiftui sprite-kit

我有一个 SwiftUI/SpriteKit 项目。

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

每当 mainData.numOfBallsInCup 递增时,它都会更新一个 Text View 。

这里是问题所在:Text View 更新时,它会导致 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 View ?

最佳答案

场景是一个模型,您在每次更新时创建新场景(在调用中),因此 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()

关于swift - 每当我的 TextView 更新时,我的 GameScene 都会重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65260985/

相关文章:

ios - 如何允许在 SpriteKit 中使用触摸移动多个图像?

ios - 在 SwiftUI View 中设置高度的问题

variables - 在 View 之间传递变量 SwiftUI

ios - Sprite 套件缓动/暂停问题

ios - 提高 CollectionView 加载速度

ios - 如何使用 Swift 从一个 View Controller 导航到另一个 View Controller

swiftUI 核心数据 @FetchRequest 单个对象

ios - 使用 scaleMode .AspectFit 时如何更改 SKView 信箱颜色

swift - 如何从内存中清除 SKSpriteNode?

ios - 如何在 switch 语句中使用 !=?