SwiftUI警报操作需要两次点击

SwiftUI警报操作需要两次点击,swiftui,sprite-kit,alert,Swiftui,Sprite Kit,Alert,以下警报(在SwiftUI视图中)中的所需操作仅在第二次点击primaryButton(“是”)后运行(在警报的第二次出现时): 如下所示,handleGameOver()更新viewModel中的两个bool,该bool由SKScene“观察”,其中“showingSolution==true”向场景中添加了一个childNode func handleGameOver() { viewModel.showingSolution = true viewModel

以下警报(在SwiftUI视图中)中的所需操作仅在第二次点击primaryButton(“是”)后运行(在警报的第二次出现时):

如下所示,handleGameOver()更新viewModel中的两个bool,该bool由SKScene“观察”,其中“showingSolution==true”向场景中添加了一个childNode

func handleGameOver() {
        viewModel.showingSolution = true
        viewModel.respondToTap = false
        gameOver = true
    }
供进一步参考…

以下是我如何设置的:

GameViewModel:

final class GameViewModel: ObservableObject {
  @Published var showingAlert = false
  @Published var tapOnTarget = false
  @Published var respondToTap = true
  @Published var showingSolution = false
}
在SwiftUI视图中:

struct GameView: View {
@ObservedObject var viewModel: GameViewModel
@Binding var showingGameScene : Bool
@Binding var gameOver: Bool


var scene: SKScene {
        let scene = GameScene()
        scene.size = CGSize(width: 400, height: 300)
        scene.scaleMode = .aspectFit
        scene.backgroundColor = UIColor(.clear)
        scene.viewModel = viewModel
        return scene
    }

var body: some View { ...
SpriteView(scene: scene)
...
最后,在场景中:

class GameScene: SKScene { 
var viewModel: GameViewModel?
...
“触摸开始”中的“viewModel?.showingAlert=true”将“showingAlert”设置为true

我不可能走得太远,因为第二次尝试成功了。但显然这还不够好。
我做错了什么?受到纽约城市大学评论的惩罚,我重新访问了我有问题的帖子,并在过程中发现了我的错误: 在GameView中,我使用了

@ObservedObject var viewModel: GameViewModel
该对象是在GameView中创建的,因此我需要使用:

@StateObject var viewModel: GameViewModel

很有帮助。

你的问题非常模糊(实际上我甚至看不到问题,问题是什么?)。您提到了一些值(
childNode
touchsbegind
等),但不清楚如何或在何处使用它们。请提供一个最小的可复制代码,我们可以尝试和复制自己。同时也请澄清你的问题。很抱歉说得含糊不清。我认为这个标题虽然含蓄,但表明了一个需要解决的问题。我认为我已经提供了足够的背景。(活到老学到老!)我将来会更加小心。在任何情况下,你的评论促使我对事情进行更仔细的观察,我能够使事情按应有的方式运行。
@StateObject var viewModel: GameViewModel