2017-04-14 3 views
0

Je développe une application ios. J'ai un SKSpriteNode sur l'écran et je reçois un dessin de l'utilisateur que je stocke comme SKTexture. Je voudrais combiner ces deux et les présenter comme un nouveau SKSpriteNode. LE PROBLÈME: Je ne trouve pas de documentation sur la fusion de SKSpriteNode dans SKTexture. Je suis sûr qu'il y a un moyen de faire ça. Quelqu'un aurait-il un exemple de code pour cela?Comment fusionner SKSpriteNode dans un SKTexture pour former un nouveau SKSpriteNode dans Swift 3?

Répondre

0

Vous devrez probablement utiliser CoreGraphics pour cela. Convertissez les deux SKTextures en CGImage en utilisant la méthode SKTexture.cgImage(), combinez-les en utilisant CoreGraphics, puis créez une nouvelle texture à partir du résultat. La méthode SKTexture.init(cgImage:) permet d'utiliser un objet CGImage pour construire la texture.

Je n'ai pas beaucoup utilisé Core Graphics, mais voici quelques liens vers des lectures associées. Je pense que vous voudrez utiliser la classe CGLayer pour dire à CoreGraphics comment empiler les textures et réutiliser la texture du sprite au fil du temps afin que CoreGraphics puisse le mettre en cache pour accélérer les choses. Core Graphics utilise Quartz 2D pour effectuer des opérations graphiques 2D rapides. Je n'ai pas beaucoup joué avec, mais je pense que ça devrait être ce que tu cherches.

Références:

me tenir au courant, je pense qu'il est très intéressant!

EDIT 1: Vous devrez également utiliser un SKMutableTexture sur l'image-objet. Cette classe permet de modifier dynamiquement les données de texture.

0

Vous ne savez pas exactement ce que vous entendez par "fusionner". Si vous voulez créer un nouveau SKSpriteNode en utilisant un SKTexture existant alors ce peut être le code que vous cherchez:

let newSprite = SKSpriteNode(texture: yourSKTexture) 
+0

Je veux combiner le nouveau 'SKTexture' avec un' SKSpriteNode' existant donc je suppose que j'ai fondamentalement besoin de combiner deux textures en une seule. – user594883

+0

Peut-être créer un nouveau SKSpriteNode avec le nouveau SKTexture et ajouter ce noeud d'image-objet en tant qu'enfant du noeud d'image-objet existant. Selon la façon dont vous voulez combiner les deux textures, vous devrez peut-être définir les positions z, alpha, les facteurs de mélange, etc. Vous ne savez pas si cela sera l'effet que vous recherchez. Peut-être que quelqu'un d'autre peut suggérer quelque chose de mieux. – JohnV

+0

L'effet serait le même mais je réitère mon nodetree plusieurs fois pendant une scène de jeu. Si j'ajoute les textures en tant que SKSpriteNodes, ça va coûter cher. Merci pour votre suggestion! – user594883

1

Vous pouvez utiliser un récipient qui contiendra deux sprites, et créer une texture de celui-ci, en utilisant méthode de SKView texture(from:), comme ceci:

override func didMove(to view: SKView) { 

     backgroundColor = .black 

     let container = SKNode() 

     let left = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100)) 
     let right = SKSpriteNode(color: .yellow, size: CGSize(width: 100, height: 100)) 

     container.addChild(left) 
     container.addChild(right) 

     left.position.x = 50 
     right.position.x = -50 

     addChild(container) 

     if let texture = view.texture(from: container) { 
      let sprite = SKSpriteNode(texture:texture) 
      addChild(sprite) 
      sprite.run(SKAction.moveTo(y: 300, duration: 5)) 
     } 

    } 

Si vous voulez créer une texture d'une partie du contenu du noeud, vous pouvez faire un recadrage en utilisant la méthode de SKView texture(from:crop:).

+0

Si je comprends bien, je dois ajouter ceci à la scène avant que ça puisse marcher? Je ne pense pas que je veux faire ça. – user594883

+0

@ user594883 Si vous utilisez déjà des sprites, je pensais qu'ils sont déjà ajoutés à la scène. Pourquoi les utilisez-vous s'ils ne font pas partie de la scène? – Whirlwind