gpt4 book ai didi

ios - 在 SwiftUI 中使用 SpriteKit

转载 作者:搜寻专家 更新时间:2023-10-31 08:28:02 28 4
gpt4 key购买 nike

我在 SwiftUI 中创建 SpriteKit 场景时遇到问题。我最初将此项目创建为 SwiftUI 项目。

这是我目前的代码:

ContentView.swift:

/// Where the UI content from SwiftUI originates from.
struct ContentView : View {
var body: some View {
// Scene
SceneView().edgesIgnoringSafeArea(.all)
}
}

场景 View .swift:

/// Creates an SKView to contain the GameScene. This conforms to UIViewRepresentable, and so can be used within SwiftUI.
final class SceneView : SKView, UIViewRepresentable {

// Conformance to UIViewRepresentable
func makeUIView(context: Context) -> SKView {
print("Make UIView")
return SceneView(frame: UIScreen.main.bounds)
}
func updateUIView(_ uiView: SKView, context: Context) {
print("Update UIView")
}

// Creating scene
override init(frame: CGRect) {
super.init(frame: frame)

let scene = Scene(size: UIScreen.main.bounds.size)
presentScene(scene)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

场景.swift:

/// The scene for the game in SpriteKit.
final class Scene : SKScene {

override func didMove(to view: SKView) {
super.didMove(to: view)

print("Scene didMove:")
}
}

问题

问题是场景多次重新加载,如日志所示(因为代码中有print):

Scene didMove:

Make UIView

Scene didMove:

Update UIView


如您所见,Scene didMove: 被打印了两次。我只想调用一次,因为我想在这里创建我的 Sprite 。有什么想法吗?

最佳答案

swift 用户界面 2

现在有一个本地 View 负责显示 SKScene - 它叫做 SpriteView

假设我们有一个简单的SKScene:

class Scene: SKScene {
override func didMove(to view: SKView) {
...
}
}

我们可以使用 SpriteView 直接在 SwiftUI View 中显示它:

struct ContentView: View {
var scene: SKScene {
let scene = Scene()
scene.size = CGSize(width: 300, height: 400)
scene.scaleMode = .fill
return scene
}

var body: some View {
SpriteView(scene: scene)
.frame(width: 300, height: 400)
.edgesIgnoringSafeArea(.all)
}
}

您可以在此处找到更多信息:

关于ios - 在 SwiftUI 中使用 SpriteKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com