2017-05-23 4 views
1

J'ai configuré un SKScene à utiliser comme SKReferenceNode. Le traîneau est un SKSpriteNode avec une classe personnalisée définie dans la scène de noeud de référence et tous les chiens sont des enfants du sprite de traîneau. La classe personnalisée et en utilisant le noeud de référence est très bien, mon problème est que je suis incapable de "recadrer" la scène pour montrer seulement N nombre de chiens. C'est comme si, après avoir déposé le nœud de référence dans une autre scène, cette scène parent ignore les paramètres largeur/hauteur du nœud de référence et affiche simplement tout ce qu'il contient. Donc la question est, est-ce possible? Ou SKReferenceNodes n'adhère-t-il pas aux propriétés width width et heights lorsqu'il est utilisé dans une scène parente?Recadrage d'un SKReferenceNode

La première image est de la scène de référence pleine vue (70x425). La deuxième image est de ce que l'image devrait ressembler quand je change la taille par programme si je veux seulement que les 2 chiens inférieurs soient montrés.

enter image description hereenter image description here

class SledTeam: SKSpriteNode { 
    var dogTeam = [Int]() 
    required init?(coder aDecoder: NSCoder) { 
     switch dogTeam.count { 
      case 7,8: 
       self.scene?.size.height = 425 
       break 
      case 5,6: 
       self.scene?.size.height = 335 
       break 
      case 3,4: 
       self.scene?.size.height = 260 
       break 
      case 1,2: 
       self.scene?.size.height = 190 
       break 
      default: 
       break 
     } 
    } 
} 
+0

Eh bien, je réussi à contourner ce problème en utilisant un nœud de culture, mais je encore aime savoir pourquoi les paramètres de taille de scène ne s'appliquent pas. Je sais que le nœud de référence lui-même n'a pas de propriété de taille, mais cela me fait penser qu'il devrait utiliser la taille de la scène qui lui est assignée. – TheValyreanGroup

+0

Pourquoi les paramètres de taille de scène s'appliqueraient-ils? la scène ne fait aucun recadrage, donc juste parce que vous ne les voyez pas, cela ne veut pas dire qu'ils doivent recadrer – Knight0fDragon

+0

Ok. Je supposais juste que si une scène était configurée comme la 2ème image, elle reculerait, comme dans UIKit. – TheValyreanGroup

Répondre

0

Mon gues est d'utiliser un nœud de sprite invisible dans votre fichier SKS référence à la taille de contient tous les nœuds. Après avoir appelé ce noeud "base" invisible et le recadrer. Pour obtenir le nœud invisible, vous pouvez utiliser cette extension:

extension SKReferenceNode { 
    func getBasedChildNode() -> SKNode? { 
     if let child = self.children.first?.children.first {return child} 
     else {return nil} 
    } 
} 

pour d'autres détails, voir mon ancien poste: Add SKReferenceNode/SKScene to another SKScene in SpriteKit