2016-01-04 17 views
6

Ci sono alcuni tutorial overlay su Internet, tutti usano overlaySKScene ad un certo punto.Come posso sovrapporre un SKScene a un SCNScene in Swift?

Ciò non è possibile in qualche modo nel mio progetto, poiché (credo) la mia vista non utilizza il costruttore di SCNView in qualsiasi punto (che è overlaySKScene).

Nel viewDidLoad del ViewController, in pratica solo il MainScene viene creato:

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

... che va qui (nota: SCNScene invece di SCNView):

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

La scena è perfettamente creato , Mi piacerebbe ora sovrapporre un SKScene. Qualcuno sa come?

+0

scene e visualizzazioni sono due cose diverse, self.sceneView should not = MainScene – Knight0fDragon

+0

se overlaySKScene non funziona, è perché non hai importato SpriteKit nel tuo codice MainScene – Knight0fDragon

risposta

6

L'overlay di SpriteKit passa alla vista SceneKit, non alla scena di SceneKit. Questo è un po 'confuso perché stai sovrapponendo una scena su una vista.

Vedo diverse possibili fonti di errore:

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

come ritorni definiti un SCNScene. Lo stai assegnando a una proprietà che si aspetta un SCNView.

La linea

scnView = view as! SCNView 

andrà in crash se non view restituisce un contatto corretto SCNView esempio. Ma la definizione init che hai scritto si aspetta un UIView.

Da qualche parte, è necessario avere la vista da SCNView. Tale visualizzazione, poiché è conforme al protocollo SCNSceneRenderer, avrà una proprietà overlaySKScene su di essa (overlaySKScene proviene da tale protocollo, non da SCNView). È qui che puoi assegnare l'istanza SKScene.

Se avete fatto questo, allora il codice sarebbe simile

scnView.scene = self 
scnView.overlaySKScene = theSKScene 

Ho un semplice esempio di un SKScene sovrapposto su un SCNView a https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay

Vedi anche How do I create a HUD on top of my Scenekit.scene.

+0

Grazie per l'ottimo esempio !! Ma come aggiungere più di una sovrapposizione alla scena? Nell'esempio fornito viene aggiunto solo un overlay. Come riutilizzare la stessa InformationOverlayScene fornita nell'esempio fornito (https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay) per più testi e per più nodi? – yaali

+0

La scena di sovrapposizione può essere complessa come preferisci. Se pensi di aver bisogno di più scene, merita una domanda. –

Problemi correlati