2016-04-30 2 views
2

В качестве примера у меня есть круг, который перемещается влево, а затем справа на экране. Я хочу, чтобы круг был только видимым, если он находится внутри двух конкретных квадратов (maskNodes). Я использую SKCropNode, чтобы попытаться достичь этого, но маска SKCropNode позволяет мне назначать одну маску. Кто-нибудь знает способ присвоения двух или более маски SKCropNode или если это возможно. Благодаря!Назначить несколько масок SKCropNode

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) 

} 

ответ

1

Фигурного это, просто нужно добавить две маски для родителей, а затем назначить родитель в качестве маски SKCropNode.

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) 

}