2016-05-07 4 views
0

Lors de l'utilisation de SKCropNode, je souhaitais que l'image que j'ajoutais au cropNode ajuste chaque valeur alpha de pixel en fonction de la valeur alpha de pixel de masque correspondante. Après de nombreuses recherches, je suis arrivé à la conclusion que les valeurs d'alpha des pixels de l'image ne s'ajusteraient pas au masque, mais après avoir simplement poursuivi mon projet, j'ai remarqué que les pixels d'une image cropNode étaient en train de s'estomper. à la valeur alpha du pixel du masque ??? Ce qui était génial! Cependant, après avoir reproduit cela, je ne sais pas pourquoi il le fait?Comportement étrange de SKCropNode

import SpriteKit 

var textureArray: [SKTexture] = [] 
var display: SKSpriteNode! 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 

    anchorPoint = CGPointMake(0.5, 0.5) 
    backgroundColor = UIColor.greenColor() 

    fetchTexures() 

    display = SKSpriteNode() 

    let image = SKSpriteNode(texture: textureArray[0]) 
    display.addChild(image) 

    let randomCropNode = SKCropNode() 
    display.addChild(randomCropNode) 

    let cropNode = SKCropNode() 
    cropNode.maskNode = display 

    let fill = SKSpriteNode(color: UIColor.whiteColor(), size: frame.size) 
    cropNode.addChild(fill) 

    cropNode.zPosition = 10 

    addChild(cropNode) 


} 

func fetchTexures() { 

    var x: Int = 0 

    while x < 1 { 

     let texture: SKTexture = SKTextureAtlas(named: "texture").textureNamed("\(x)") 
     textureArray.append(texture) 

     x += 1 

     } 
    } 

} 

Le code ci-dessus me donne mon effet désiré, si vous supprimez le dessous, les valeurs alpha de pixels d'image plus régler conformément au masque ?? Le code ci-dessous n'est pas réellement utilisé dans mon projet, mais c'est la seule façon de régler la valeur alpha du pixel.

let randomCropNode = SKCropNode() 
display.addChild(randomCropNode) 

Quelqu'un peut-il voir ce qui est à l'origine de ce comportement, ou s'il y a une meilleure façon d'obtenir mon effet désiré?

Masque:

enter image description here

Résultat:

enter image description here

Si remove:

let randomCropNode = SKCropNode() 
display.addChild(randomCropNode) 

Résultat:

enter image description here

Répondre

0

noeud de culture n'allumer et éteindre les pixels si l'alpha varie entre < 0,5 (off) et> =. 5 (e)

Cependant, pour appliquer un fondu, si le masque alpha est juste noir (avec différents niveaux alpha) et transparent, vous appliquez le masque comme une texture régulière à votre crop crop, et vous laissez l'alpha blending prendre en charge l'effet de fondu. En ce qui concerne vos problèmes avec le code, êtes-vous sûr que votre noeud de recadrage est en train de recadrer, et pas seulement de rendre la texture? Je ne sais pas à quoi ressemble la texture pour essayer de reproduire cela.

Le noeud fourni au noeud de recadrage ne doit pas être un enfant d'un autre noeud ; cependant, il peut avoir ses propres enfants.

Lorsque le contenu du noeud de recadrage est rendu, le noeud de recadrage dessine d'abord son masque dans un tampon privé. Ensuite, il rend ses enfants. Lorsque rend ses enfants, chaque pixel est vérifié par rapport au pixel correspondant dans le masque. Si le pixel du masque a une valeur alpha inférieure à 0,05, le pixel de l'image est masqué. Tout pixel non rendu par le noeud masque est automatiquement masqué. https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode

+0

Le comportement que je reçois est-il ajuste en fait à la valeur alpha de pixel, si ma valeur pixel de masque alpha est de 0,25, mon pixel d'image valeur alpha ira à 0,25, alors qu'auparavant, si la valeur du masque était 0,25, la valeur de l'image serait 1,0.Quand j'ajoute le randomCropNode, j'obtiens l'effet désiré, mais d'après ce que j'ai lu sur Internet, les pixels de l'image ne doivent pas s'ajuster au masque. Désolé, cela n'a probablement pas de sens. Fondamentalement je veux que les pixels s'ajustent au masque, mais je ne suis pas sûr pourquoi il le fait dans cette instance seulement. – Jarron

+0

Comme je l'ai dit, cela pourrait être juste de rendre votre masque comme une texture normale au lieu d'être un masque. – Knight0fDragon

+0

Désolé, je comprends ce que vous dites, mais non, je vais joindre l'image sous peu. L'image est de 4 nuances de noir et puis j'ajoute un remplissage blanc et il se tourne vers 4 nuances de blanc. – Jarron