我有一个 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/