2016-04-30 7 views
2

Als Beispiel habe ich einen Kreis, der nach links und dann nach rechts auf dem Bildschirm reist. Ich möchte, dass der Kreis nur dann sichtbar ist, wenn er sich in zwei bestimmten Quadraten befindet (maskNodes). Ich verwende SKCropNode, um dies zu erreichen, aber die SKCropNode-Maske lässt nur eine Maske zu. Kennt jemand eine Möglichkeit, einem SKCropNode zwei oder mehr Masken zuzuordnen, oder wenn es überhaupt möglich ist? Vielen Dank!Weisen Sie SKCropNode mehrere Masken zu

override func didMoveToView(view: SKView) { 

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

    let mask1 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(50, 50)) 
    mask1.position.x = -100 

    let mask2 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(50, 50)) 
    mask2.position.x = 100 

    let cropNode = SKCropNode() 
    cropNode.maskNode = mask1 // && mask2 
    addChild(cropNode) 

    let circle = SKShapeNode(circleOfRadius: 25) 
    circle.fillColor = UIColor.blackColor() 
    cropNode.addChild(circle) 


    // Move Circle 

    let moveLeft = SKAction.moveToX(-frame.size.width/2, duration: 2) 
    let moveRight = SKAction.moveToX(frame.size.width/2, duration: 2) 
    let seq = SKAction.repeatActionForever(SKAction.sequence([moveLeft, moveRight])) 

    circle.runAction(seq) 

} 

Antwort

1

es herausgefunden hat, nur die zwei Maske zu einem Elternteil hinzufügen und dann die Eltern als Maske SKCropNode zuweisen.

override func didMoveToView(view: SKView) { 

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

    let maskParent = SKSpriteNode() 

    let mask1 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(50, 50)) 
    mask1.position.x = -100 
    maskParent.addChild(mask1) 

    let mask2 = SKSpriteNode(color: UIColor.blackColor(), size: CGSizeMake(50, 50)) 
    mask2.position.x = 100 
    maskParent.addChild(mask2) 

    let cropNode = SKCropNode() 
    cropNode.maskNode = maskParent 

    addChild(cropNode) 

    let circle = SKShapeNode(circleOfRadius: 25) 
    circle.fillColor = UIColor.blackColor() 
    cropNode.addChild(circle) 

    // Move Circle 

    let moveLeft = SKAction.moveToX(-frame.size.width/2, duration: 2) 
    let moveRight = SKAction.moveToX(frame.size.width/2, duration: 2) 
    let seq = SKAction.repeatActionForever(SKAction.sequence([moveLeft, moveRight])) 

    circle.runAction(seq) 

}