2017-05-04 6 views
2

Ich habe eine Unterklasse "ExSCNNode" von SCNNode, um weitere Eigenschaften und Verhalten zum SCNNode hinzuzufügen.Swift SCNNode Unterklasse Hittest gibt immer SCNNode * nicht * Unterklasse

class ExSCNNode : SCNNode { 
... 
} 

Ich als eine Szene mit einem ExSCNNode bauen.

let testnode = ExSCNNode() 

Wenn hittesting die Szene:

// check what nodes are tapped 
let p = gestureRecognize.location(in: scnView) 
let hitResults = scnView.hitTest(p, options: [:]) 

// check that we clicked on at least one object 
if hitResults.count > 0 { 

for hit in hitResults { 
let hitnode = hit.node 
... 

hitnode ein SCNNode kein ExSCNNode ist. Aber ich möchte den ExSCNNode Zugriff auf die erweiterte Funktionalität erhalten.

Wie erhalte ich Zugriff auf die Unterklasse anstelle der SCNNode-Klasse?

+0

Sie müssen Erstellen Sie es als 'ExSCNNode'. Sie haben den Code, in dem er erstellt wurde, nicht eingefügt. –

+0

Ich erstelle eine Szene von ExSCNodes. Nur eine im obigen Beispiel hinzugefügt – Bernd

Antwort

4

werfen Sie einfach das Objekt der Unterklasse:

// check what nodes are tapped 
let p = gestureRecognize.location(in: scnView) 
let hitResults = scnView.hitTest(p, options: [:]) 

for hit in hitResults { 
    if let hitnode = hit.node as? ExSCNNode { 

     … 
    } 

Aber wenn Sie alle Ihre Knoten wollen die gleichen, benutzerdefinierte Eigenschaften haben, benutzen Sie einfach eine Erweiterung:

extension SCNNode { 
    var description: String? = nil 
    … 
}