2016-05-07 15 views
0

Bei der Verwendung von SKCropNode wollte ich das Bild, das ich zum cropNode hinzufüge, um jeden einzelnen Pixel-Alpha-Wert entsprechend dem entsprechenden Pixel-Alpha-Wert der Maske anpassen.SKCropNode Seltsames Verhalten

Nach vielen Recherchen kam ich zu dem Schluss, dass die Alpha-Werte des Bildpixels sich nicht an die Maske anpassen würden, aber nachdem ich mein Projekt fortgesetzt hatte, bemerkte ich, dass die Pixel eines bestimmten cropNode-Bildes tatsächlich verblassten zum Maskenpixel Alpha-Wert ??? Was großartig war! Aber nachdem ich dies reproduziert habe, weiß ich nicht, warum es das tut?

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 

     } 
    } 

} 

Der obige Code gibt mir meine gewünschte Wirkung, aber wenn Sie die unten entfernen, werden die Bildpixel Alpha-Werte nicht mehr in Übereinstimmung mit der Maske einstellen ?? Der folgende Code wird nicht wirklich in meinem Projekt verwendet, aber es ist die einzige Möglichkeit, den Pixel-Alpha-Wert anzupassen.

Kann jemand sehen, was dieses Verhalten verursacht, oder wenn es eine bessere Weise gibt, meinen gewünschten Effekt zu erhalten?

Maske:

enter image description here

Ergebnis:

enter image description here

Wenn entfernen:

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

Ergebnis:

enter image description here

Antwort

0

Crop Knoten schaltet sich nur ein und aus Pixeln, wenn der Alpha zwischen < 0,5 (off) und> = variiert. 5 (auf)

jedoch ein Fade anwenden, wenn Ihr Alpha-Maske ist Nur schwarz (mit verschiedenen Alpha-Stufen) und transparent, wenden Sie die Maske als reguläre Textur auf Ihren Crop-Knoten an und lassen Alpha-Blending den Fade-Effekt berücksichtigen.

Sind Sie sicher, dass Ihr Crop-Knoten abgeschnitten und nicht nur die Textur gerendert wird? Ich weiß nicht, wie die Textur aussieht, um das zu reproduzieren.

Der Knoten, der dem Crop-Knoten zur Verfügung gestellt wird, darf kein Kind eines anderen Knotens sein; es kann jedoch eigene Kinder haben.

Wenn der Inhalt des Zuschneiden-Knotens gerendert wird, zeichnet der Zuschneiden-Knoten zuerst seine Maske in einen privaten Puffer. Dann macht es seine Kinder. Wenn seine Kinder gerendert wird, wird jedes Pixel gegen das entsprechende Pixel in der Maske verifiziert. Wenn das Pixel in der Maske einen Alpha-Wert von weniger als 0,05 aufweist, wird das Bildpixel ausgeblendet. Jedes Pixel, das nicht vom Maskenknoten gerendert wird, wird automatisch ausgeblendet. https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode

+0

Das Verhalten Ich erhalte tatsächlich ist es ist die Anpassung an das Pixel Alpha-Wert, wenn meine Maske Pixel Alpha-Wert von 0,25 ist, mein Bildpixel Alpha-Wert auf 0,25 gehen, vor, während, wenn der Maskenwert war 0,25 würde der Bildwert 1,0 sein.Wenn ich den randomCropNode hinzufüge, bekomme ich meinen gewünschten Effekt, aber von dem, was ich im Internet gelesen habe, sollten sich die Pixel des Bildes nicht an die Maske anpassen. Tut mir leid, das macht wahrscheinlich keinen Sinn. Grundsätzlich möchte ich, dass sich die Pixel an die Maske anpassen, aber ich bin mir nicht sicher, warum das nur in diesem Fall geschieht. – Jarron

+0

Wie ich schon sagte, kann es sein, dass Sie Ihre Maske einfach als normale Textur rendern, anstatt eine Maske zu sein – Knight0fDragon

+0

Entschuldigung, ich verstehe, was Sie sagen, aber nein, ich werde das Bild in Kürze anhängen. Das Bild ist 4 Schattierungen von Schwarz und dann füge ich eine weiße Füllung hinzu und es wird zu 4 Schattierungen von Weiß. – Jarron