如何在Swift中的SCNScene上覆盖SKScene?

时间:2016-01-04 03:19:10

标签: ios swift sprite-kit scenekit

互联网上有一些叠加教程,全部使用 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。有谁知道怎么做?

1 个答案:

答案 0 :(得分:8)

SpriteKit叠加在SceneKit视图上,而不在SceneKit场景上。这有点令人困惑,因为你在视图上覆盖了一个场景。

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

self.sceneView = MainScene(view: self.view)) 
定义的

返回SCNScene。您将其分配给需要SCNView

的属性

该行

scnView = view as! SCNView
除非view返回正确连接的SCNView实例,否则

将崩溃。但是,您撰写的init定义需要UIView

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

如果您已经这样做了,那么您的代码看起来就像

scnView.scene = self 
scnView.overlaySKScene = theSKScene

我在https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay上的SKScene上覆盖了SCNView的简单示例

另见How do I create a HUD on top of my Scenekit.scene