swift - Spritekit 和 swiftui,换场景更好的方式
问题描述
我编写了这几行简单的代码来使用 SpriteKit 在 Swiftui 中的 2 个场景之间进行切换,我试图了解是否有一种(更好的)不同方式可以使用按钮从一个场景切换到另一个场景。
struct ContentView: View {
@StateObject var firstscene = FirstScene()
@StateObject var secondscene = SecondScene()
@State var changeScene = false
var body: some View {
ZStack{
if changeScene {
SpriteView(scene: firstscene)
} else {
SpriteView(scene: secondscene)
}
Button {
changeScene.toggle()
} label: {
Text("Change")
}
}
}
}
// 使用 SKscene 的子类创建的 2 个 SKScene
class FirstScene: SKScene, ObservableObject {
let firstScene = SKScene(fileNamed: "FirstScene")
override func didMove(to view: SKView) {
scene?.view?.presentScene(firstScene)
}
}
class SecondScene: SKScene, ObservableObject {
let secondScene = SKScene(fileNamed: "SecondScene")
override func didMove(to view: SKView) {
scene?.view?.presentScene(secondScene)
}
}
现在我的疑问是,我正在使用 var changeScene 更改 contentView 中的 SpriteView,是否可以使用另一种方法以其他方式完成相同的事情?
对任何建议持开放态度,我试图理解这个框架。
谢谢
解决方案
您正在使用切换视图的标准方式。你可以像这样清理你的代码:
struct ContentView: View {
@State var changeScene = false
var body: some View {
ZStack{
SpriteView(scene: (changeScene ? FirstScene() : SecondScene())) // this is a terniary operator
Button {
changeScene.toggle()
} label: {
Text("Change")
}
}
}
}
新视图不需要是@StateObjects。您可以直接在视图中调用视图类型。
注意:我远离我的电脑,所以这没有经过测试。
推荐阅读
- python - Python:写入文件时对齐输出(不打印)
- node.js - 如何在 usr/local/bin/ 目录之外更新 Node 版本?
- mysql - 将 blob 列从 mysql dB 导出到磁盘并用新文件名替换
- linux - 为什么 tcpdump 不在后台运行?
- c# - HttpClient PostAsync 模型为空,但它适用于 Postman
- java - 令牌“记录”上的 Java 14 语法错误,需要记录
- class - 如何在飞镖中获取类属性名称的字符串?
- excel - 使用 Select Case 更改多列中的值
- c++ - 如何在文件关闭之前告诉文件刷新实际上有效?
- c# - 如何在 Unity2D 中制作跳跃动画?