Как поддерживать ObservedObject SKScene в актуальном состоянии с представленной сценой SpriteKit?

#ios #swift #sprite-kit #swiftui #skscene

#iOS #swift #sprite-kit #swiftui #skscene

Вопрос:

Прямо сейчас я настраиваю SwiftUI для использования в качестве моего пользовательского интерфейса в игре SpriteKit. Я настроил его так, чтобы моя игра запускалась и работала нормально. Мой пользовательский интерфейс настроен следующим образом

 struct GameView: View{
    @ObservedObject var scene: GameScene
    var body: some View{
        ZStack{
            SpriteView(scene: scene)
                .edgesIgnoringSafeArea(.all)
            
            //UI
            VStack{
                HStack{
                    Spacer()
                    Text("(scene.name!)").foregroundColor(.red)
                    Button(action: {
                        scene.goBack()
                    }, label: {
                        Text("Return")
                    })
                    Button(action: {
                        scene.tryEnter()
                    }, label: {
                        Text("Enter")
                    })
                }
                Spacer()
            }.padding()
            .edgesIgnoringSafeArea(.trailing)
        }
    }
}
  

Как мне сделать так, чтобы я мог вернуться с помощью GoBack()? Проблема в том, что моя сцена ObservedObject по-прежнему установлена на мою исходную сцену и возвращает View как NIL, потому что она не представлена atm.

 func goBack(){
    guard map.originScene != nil else { return }
    if let scene = SKScene(fileNamed: map.originScene!.name!) {
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill
        let transition:SKTransition = SKTransition.fade(withDuration: 1)
        view!.presentScene(scene, transition: transition)
    }
}