如何从 SKShapeNode 裁剪出 SKLabelNode?
How to crop out a SKLabelNode from a SKShapeNode?
我想按照下面的步骤得到上面的效果
基本上由
的背景图片SKSpriteNode组成
然后我在上面添加了一个红色的 SKShapeNode
我想从那个红色 ShapeNode 上切掉 SKLabel 节点。
我有一个代码可以伪造这种效果。但是,如果你移动形状节点,那么这个噱头就会暴露出来。
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)
}
}
如果你反过来想,这会容易得多。
将红色层放在 back/bottom。最低的 zPosition。对于这个例子,我们假设 -1.0
。
将图片放在上面,zPosition 0.0
把字母放在上面,zPostion 1.0
所以,从iPhone的画面来看,是这样的:
- 屏幕
- 字母
- 图片
- 红色背景
您想用字母遮盖图片。
这样做之后,每当您移动字母时,它都会从图片中显示其下方的内容。其他都是红色的。
我想按照下面的步骤得到上面的效果
基本上由
的背景图片SKSpriteNode组成然后我在上面添加了一个红色的 SKShapeNode
我想从那个红色 ShapeNode 上切掉 SKLabel 节点。
我有一个代码可以伪造这种效果。但是,如果你移动形状节点,那么这个噱头就会暴露出来。
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)
}
}
如果你反过来想,这会容易得多。
将红色层放在 back/bottom。最低的 zPosition。对于这个例子,我们假设 -1.0
。
将图片放在上面,zPosition 0.0
把字母放在上面,zPostion 1.0
所以,从iPhone的画面来看,是这样的:
- 屏幕
- 字母
- 图片
- 红色背景
您想用字母遮盖图片。
这样做之后,每当您移动字母时,它都会从图片中显示其下方的内容。其他都是红色的。