每当我的文本视图更新时,我的 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()
我有一个 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()