2016-01-04 3 views
6

В Интернете есть некоторые учебные пособия по оверлею, которые в какой-то момент используют overlaySKScene.Как я могу наложить SKScene поверх SCNScene в Swift?

Это как-то не возможно в моем проекте, так как (я думаю) мой взгляд не использует конструктор SCNView в любой точке (который входит в состав overlaySKScene).

В viewDidLoad в ViewController, в основном только 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. Кто-нибудь знает как?

+0

сцены и представления - это две разные вещи, self.sceneView не должен = MainScene – Knight0fDragon

+0

, если overlaySKScene не работает, это потому, что вы не импортировали SpriteKit в свой код MainScene. – Knight0fDragon

ответ

6

Оверлей 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 

У меня есть простой пример SKScene наложенной на SCNView в https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay

Смотрите также How do I create a HUD on top of my Scenekit.scene.

+0

Спасибо за отличный пример! Но как добавить более одного наложения в сцену? В представленном образце добавляется только один оверлей. Как повторно использовать один и тот же InformationOverlayScene, предоставленный в приведенном примере (https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay) для нескольких текстов и для нескольких узлов? – yaali

+0

Оверлейная сцена может быть такой сложной, как вам нравится. Если вы считаете, что вам нужно несколько сцен, это заслуживает собственного вопроса. –

Смежные вопросы