一尘不染

如何在Swift中将SKScene覆盖在SCNScene之上?

swift

互联网上有一些重叠式教程,有时会全部使用 overlaySKScene

这在我的项目中某种程度上是不可能的,因为(我猜)我的视图SCNView在任何时候都没有使用(overlaySKScene的一部分)构造函数。

在ViewController的viewDidLoad中,基本上仅创建MainScene:

viewDidLoad() {
self.sceneView = MainScene(view: self.view)) }

…在这里(注意:SCNScene而不是SCNView):

class MainScene: SCNScene, SCNPhysicsContactDelegate {...
init(view:UIView) {
scnView = view as! SCNView
super.init()
scnView.scene = self; (...) }

场景已完美创建,我现在想覆盖一个SKScene。有人知道吗?


阅读 206

收藏
2020-07-07

共1个答案

一尘不染

SpriteKit叠加层在SceneKit视图上,而不在SceneKit场景上。这有点令人困惑,因为您要在视图上叠加场景。

我看到几个可能的错误源:

self.sceneView = MainScene(view: self.view))

按定义返回SCNScene。您正在将其分配给期望使用的属性SCNView

线

scnView = view as! SCNView

除非view返回正确连接的SCNView实例,否则将崩溃。但是init您编写的定义期望使用UIView

在某个地方,您需要将视图设为SCNView。该视图由于符合protocol
SCNSceneRenderer,因此将具有overlaySKScene属性(overlaySKScene来自该协议,而不来自SCNView)。您可以在其中分配SKScene实例。

如果这样做,那么您的代码将类似于

scnView.scene = self 
scnView.overlaySKScene = theSKScene

我在https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20OverlaySKScene上有一个覆盖的简单示例SCNView

2020-07-07