2017-01-09 2 views
1

J'ai essayé de rendre un arbre de nœuds dans un SKTexture comme solution possible à une autre question here. J'ai essayé de chercher une réponse à cela, et je suis tombé sur une des pages de développeur d'Apple (voir here). Il dit que la commande qui convertit un arbre de nœud dans un SKTexture est la suivante:Swift 3 (SpriteKit): Créer une texture à partir d'un arbre de nœuds

func texture(from node: SKNode) -> SKTexture? 

Bien que, le code est incomplet car il n'y a pas de code qui exécute la conversion d'un arbre de nœud à un SKTexture. Est-ce que je fais quelque chose de mal ou quel est le code complet que je devrais utiliser pour rendre un arbre de noeuds dans un SKTexture.

Merci pour vos conseils, votre aide et vos réponses!

Répondre

2

texture(from:) est une méthode d'instance de SKView qui prend un nœud (avec zéro ou plusieurs enfants) en tant que paramètre et renvoie un SKTexture facultatif. Puisque la valeur retournée est facultative, vous devrez la déplier avant de l'utiliser.

De didMove(to:), vous pouvez utiliser le paramètre view pour créer une texture

if let texture = view.texture(from: node) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 

d'autres méthodes dans la sous-classe SKScene, utilisez en option enchaînant

if let texture = self.view?.texture(from: node) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 

Vous pouvez également rendre la partie de la Contenu de l'arbre des noeuds à l'intérieur d'un rectangle avec

let rect = CGRect(x:-width/2, y:-height/2, width:width, height:height) 
if let texture = self.view?.texture(from: node, crop: rect) { 
    let sprite = SKSpriteNode(texture:texture) 
    addChild(sprite) 
} 
+0

Cela fonctionne merci! Y at-il de toute façon à changer le contenu de la texture pendant l'exécution au lieu de toujours créer une nouvelle texture à chaque image. À l'heure actuelle, le taux de trame est si bas parce que je crée une nouvelle texture à chaque image. –

+0

Étant donné que l'arborescence des noeuds n'a pas besoin d'être dans la scène, vous pouvez précalculer les textures lors de l'initialisation ou convertir l'arborescence des noeuds en textures dans un thread d'arrière-plan pendant l'exécution. Si votre arborescence de nœuds est hautement dynamique, vous devrez peut-être utiliser autre chose que 'texture (from:)'. Cela dépend de ce que vous essayez d'accomplir. – 0x141E

+0

La texture change tout au long du programme et je veux toujours faire un corps de physique avec cette texture. Comment rendre l'arbre des nœuds dans des textures dans un thread d'arrière-plan pendant l'exécution? –