如何从SKShapeNode中裁剪出SKLabelNode?

时间:2016-10-20 03:08:39

标签: objective-c swift xcode sprite-kit skcropnode

enter image description here

我希望使用以下步骤获得上面显示的效果。

基本上,它由

的背景图像SKSpriteNode组成

enter image description here

我在它上面添加了一个红色的SKShapeNode

enter image description here

我想从Red ShapeNode中删除SKLabel节点。

enter image description here

我有一个代码可以伪造这种效果。但是,如果移动形状节点,则会暴露噱头。

class GameScene: SKScene {

    override func didMove(to view: SKView) {
        let baseNode = SKSpriteNode(imageNamed: "step1")
        baseNode.zPosition = 0
        baseNode.position = CGPoint(x:0,y:100)

        let shapeNode = SKShapeNode(rect: CGRect(origin: CGPoint(x:-155, y:-15), size: baseNode.size))
        shapeNode.fillColor = .red
        shapeNode.zPosition = 1
        addChild(shapeNode)

        let labelNode = SKLabelNode(text: "Hi")
        labelNode.fontColor = .white
        labelNode.fontName = "Arial"
        labelNode.fontSize = 185
        labelNode.zPosition = 2

        let cropNode = SKCropNode()
        cropNode.addChild(baseNode)
        cropNode.maskNode = labelNode
        cropNode.zPosition = 1
        addChild(cropNode)
    }
}

如果我尝试混合模式,它就不会把我带到任何地方。]

class GameScene: SKScene {

    override func didMove(to view: SKView) {
        let baseNode = SKSpriteNode(imageNamed: "step1")
        baseNode.zPosition = 0
        baseNode.position = CGPoint(x:0,y:100)
        addChild(baseNode)

        let shapeNode = SKShapeNode(rect: CGRect(origin: CGPoint(x:-155, y:-15), size: baseNode.size))
        shapeNode.fillColor = .green
        shapeNode.zPosition = 1
        addChild(shapeNode)

        let labelNode = SKLabelNode(text: "Hi")
        labelNode.fontColor = .red
        labelNode.fontName = "Arial"
        labelNode.fontSize = 185
        labelNode.zPosition = 2
        labelNode.blendMode = .subtract
        shapeNode.addChild(labelNode)

        let circle = SKShapeNode(circleOfRadius: 40)
        circle.position = CGPoint(x:0,y:40)
        circle.fillColor = .green
        circle.blendMode = .subtract
        circle.zPosition = 3
        shapeNode.addChild(circle)
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

如果你反思你的想法,那就容易多了。

将红色图层放在背面/底部。最低的zPosition。让我们为这个例子说-1.0

将图片置于此顶部,zPosition为0.0

将上面的字母放在1.0

的zPostion上

所以,从iPhone的屏幕上看,它是这样的:

  • 屏幕
  • 图片
  • 红色BG

你想用这封信来掩盖画面。

完成此操作后,无论何时移动信件,都会从图片中显示其下方的内容。其他一切都是红色的。