У меня есть проект SwiftUI/SpriteKit.
Я использую SwiftUI SpriteView
для отображения своего GameScene
.
Всякий раз, когда mainData.numOfBallsInCup
увеличивается, он обновляет представление Text
.
Вот проблема: когда представление Text
обновляется, оно вызывает перезагрузку GameScene
. sceneDidLoad()
GameScene запускается каждый раз, и сцена возвращается к исходному состоянию.
Мой 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)
}
}
}
}
}
Как обновить представление Text
без перезагрузки GameScene
?
Сцена — это модель, и вы создаете новую сцену (прямо во время вызова) при каждом обновлении, поэтому 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()