4

Je crée une scène Case.sks (à l'aide de l'éditeur de niveau), à l'intérieur d'un SKSpriteNode (nom: carré) et d'un SKLabel (nom: étiquette). Dans ma scène principale, GameScene.sks, j'utilise un SKReferenceNode avec "Case" comme référence.Récupère un nœud enfant de SKReferenceNode dans SpriteKit SWIFT

J'ai besoin d'accéder à l'image-objet "carré" de ma scène principale.

Ma première idée était d'appeler directement le nœud enfant:

let firstSquare = childNode(withName: "square") as! SKSpriteNode 

Mais je me suis:

Fatal error: unexpectedly found nil while unwrapping an Optional value 

J'essayé:

let caseRef = childNode(withName: "Case") as! SKReferenceNode 
let firstSquare = caseRef.childNode(withName: "square") as! SKSpriteNode 

Mais je me suis sur le firstSquare ligne:

Comment obtenir un nœud enfant d'une scène de référence?

+0

Où appelez-vous ce code? A partir d'un mode init (votre scène n'est probablement pas prête à recevoir ses enfants) ou de didMoveToView? –

+0

De sceneDidLoad() dans mon GameScene.swift – cmii

+0

Jetez un coup d'œil à cette réponse et faites-moi savoir si cela fonctionne. –

Répondre

6

Essayez d'appeler avec ce code:

override func sceneDidLoad() { 
    if let sprite = self.childNode(withName: "//square") as? SKSpriteNode { 
      // do whatever you want with the sprite 
    } 
    ... 
} 
+0

Cela fonctionne merci. Pouvez-vous m'expliquer le "//" avant "carré"? – cmii

+2

Bien sûr, cela spécifie que la recherche doit commencer au niveau du nœud racine et être effectuée de manière récursive sur l'ensemble de l'arborescence des nœuds. Sinon, il effectue une recherche récursive à partir de sa position actuelle. Vous pouvez trouver plus de détails ici: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/#//apple_ref/doc/uid/TP40013023-CH1-SW74 –