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