使用 SKLabel 文本裁剪 SKTexture
Crop SKTexture with SKLabel text
为了在 SpriteKit 中创建一个按钮,我创建了一个带有 SKShapeNode 的圆角矩形,然后在其上放置了一个 SKLabel。
看起来像这样:
我想让标签下的背景随着标签下的背景变化。所以图中的T、E和A的一半是紫色的。
有什么方法可以中途给字体上色吗?或者以某种方式裁剪带有放置在其上的 SKLabel 的白色矩形纹理。这样就没有标签,而是从纹理中切出标签。基本上,我希望字体颜色是它后面的颜色。
我必须在不导入图像的情况下通过代码以某种方式执行此操作。
Knight0fDragon的评论很有道理,这个建议不错。在没有 textureFromNode
的情况下,还有另一种解决方案。
您可以使用背景和标签准备 cropNode
,然后使用按钮和 cropNode 制作另一个背景克隆:
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let background = SKSpriteNode.init(imageNamed: "background.png")
background.zPosition = 1
let background2 = background.copy() as! SKSpriteNode
//label
let titleLabel = SKLabelNode(fontNamed: "AvenirNext-Bold")
titleLabel.fontSize = 150
titleLabel.fontColor = SKColor.black
titleLabel.text = "RATE"
titleLabel.horizontalAlignmentMode = .center
titleLabel.zPosition = 5
titleLabel.blendMode = .subtract
//cropNode
let cropNode = SKCropNode()
cropNode.addChild(background)
cropNode.maskNode = titleLabel
self.addChild(cropNode)
cropNode.zPosition = 5
//button
let button = SKShapeNode(rect: CGRect(x: -300, y: -50, width: 600, height: 200), cornerRadius: 100)
button.zPosition = 4
button.fillColor = SKColor.white
self.addChild(background2)
self.addChild(button)
}
}
使用的图片:
输出:
另一个测试背景:
输出 2:
为了在 SpriteKit 中创建一个按钮,我创建了一个带有 SKShapeNode 的圆角矩形,然后在其上放置了一个 SKLabel。
看起来像这样:
我想让标签下的背景随着标签下的背景变化。所以图中的T、E和A的一半是紫色的。
有什么方法可以中途给字体上色吗?或者以某种方式裁剪带有放置在其上的 SKLabel 的白色矩形纹理。这样就没有标签,而是从纹理中切出标签。基本上,我希望字体颜色是它后面的颜色。
我必须在不导入图像的情况下通过代码以某种方式执行此操作。
Knight0fDragon的评论很有道理,这个建议不错。在没有 textureFromNode
的情况下,还有另一种解决方案。
您可以使用背景和标签准备 cropNode
,然后使用按钮和 cropNode 制作另一个背景克隆:
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let background = SKSpriteNode.init(imageNamed: "background.png")
background.zPosition = 1
let background2 = background.copy() as! SKSpriteNode
//label
let titleLabel = SKLabelNode(fontNamed: "AvenirNext-Bold")
titleLabel.fontSize = 150
titleLabel.fontColor = SKColor.black
titleLabel.text = "RATE"
titleLabel.horizontalAlignmentMode = .center
titleLabel.zPosition = 5
titleLabel.blendMode = .subtract
//cropNode
let cropNode = SKCropNode()
cropNode.addChild(background)
cropNode.maskNode = titleLabel
self.addChild(cropNode)
cropNode.zPosition = 5
//button
let button = SKShapeNode(rect: CGRect(x: -300, y: -50, width: 600, height: 200), cornerRadius: 100)
button.zPosition = 4
button.fillColor = SKColor.white
self.addChild(background2)
self.addChild(button)
}
}
使用的图片:
输出:
另一个测试背景:
输出 2: