掩码 SKSpriteNode
Mask SKSpriteNode
我向我的 sks 文件添加了几个节点,现在我想向最低的节点添加一些掩码 SKSpriteNode
。结构如下图:
其中
- 绿色 - wordInfoHolder
- 红色 - 标签容器
- whiteText - 标签
现在我想隐藏红色部分。要执行此类操作,我读到可以使用 SKCropNode
。
我能够在场景文件中找到我所有的节点并将它们保存到变量中。
if let holder = childNode(withName: "wordInfoHolder") as? SKSpriteNode {
wordInfoHolder = holder
if let wordSwitchNode = wordInfoHolder?.childNode(withName:"wordSwitchNode") as? SKSpriteNode {
self.wordSwitchNode = wordSwitchNode
if let label = self.wordSwitchNode?.childNode(withName:"infoLabel") as? SKLabelNode {
wordSwitchLabelNode = label
}
}
}
所有 3 个对象都已存储且正确。
现在我想给根对象添加一些掩码。
为此我准备了遮罩图像:
并尝试做类似的事情:
guard let holder = wordInfoHolder else { return }
let positionToSet = holder.position
let mask = SKSpriteNode(imageNamed: "rectangle_mask")
let cropNode = SKCropNode()
holder.removeFromParent()
cropNode.addChild(holder)
cropNode.maskNode = mask
cropNode.position = positionToSet
self.addChild(cropNode)
但我什么也没看到。我希望看到 SKSpriteNode
.
的绿色部分
哪里做错了?
假设您已经在所有对象上设置了 zPosition。
我很确定这个问题是因为你正在将你的 holder 对象从场景移动到 cropNode 它保留了它在场景中的位置信息(例如,如果它在场景中的位置是 500,那么它是 500 cropNode 中的位置现在是 500, 500)
我能够重现您的问题,通过将 holder.position 设置为零,问题就消失了。
在下图中,我使用黄色框作为遮罩,蓝色和粉色框是测试对象,以确保 cropNode 位于它们之间。
if let holder = self.childNode(withName: "holder") as? SKSpriteNode {
self.holder = holder
if let switcher = holder.childNode(withName: "//switcher") as? SKSpriteNode {
self.switcher = switcher
}
}
if let mask = self.childNode(withName: "mask") as? SKSpriteNode {
mask.removeFromParent()
let positionToSet = holder.position
holder.position = CGPoint.zero
mask.position = CGPoint.zero
let cropNode = SKCropNode()
holder.removeFromParent()
cropNode.addChild(holder)
cropNode.maskNode = mask
cropNode.position = positionToSet
cropNode.zPosition = 10
self.addChild(cropNode)
}
添加花絮
holder.move(toParent: cropNode)
可以用来代替
holder.removeFromParent()
cropNode.addChild(holder)
我向我的 sks 文件添加了几个节点,现在我想向最低的节点添加一些掩码 SKSpriteNode
。结构如下图:
其中
- 绿色 - wordInfoHolder
- 红色 - 标签容器
- whiteText - 标签
现在我想隐藏红色部分。要执行此类操作,我读到可以使用 SKCropNode
。
我能够在场景文件中找到我所有的节点并将它们保存到变量中。
if let holder = childNode(withName: "wordInfoHolder") as? SKSpriteNode {
wordInfoHolder = holder
if let wordSwitchNode = wordInfoHolder?.childNode(withName:"wordSwitchNode") as? SKSpriteNode {
self.wordSwitchNode = wordSwitchNode
if let label = self.wordSwitchNode?.childNode(withName:"infoLabel") as? SKLabelNode {
wordSwitchLabelNode = label
}
}
}
所有 3 个对象都已存储且正确。
现在我想给根对象添加一些掩码。
为此我准备了遮罩图像:
并尝试做类似的事情:
guard let holder = wordInfoHolder else { return }
let positionToSet = holder.position
let mask = SKSpriteNode(imageNamed: "rectangle_mask")
let cropNode = SKCropNode()
holder.removeFromParent()
cropNode.addChild(holder)
cropNode.maskNode = mask
cropNode.position = positionToSet
self.addChild(cropNode)
但我什么也没看到。我希望看到 SKSpriteNode
.
哪里做错了?
假设您已经在所有对象上设置了 zPosition。
我很确定这个问题是因为你正在将你的 holder 对象从场景移动到 cropNode 它保留了它在场景中的位置信息(例如,如果它在场景中的位置是 500,那么它是 500 cropNode 中的位置现在是 500, 500)
我能够重现您的问题,通过将 holder.position 设置为零,问题就消失了。
在下图中,我使用黄色框作为遮罩,蓝色和粉色框是测试对象,以确保 cropNode 位于它们之间。
if let holder = self.childNode(withName: "holder") as? SKSpriteNode {
self.holder = holder
if let switcher = holder.childNode(withName: "//switcher") as? SKSpriteNode {
self.switcher = switcher
}
}
if let mask = self.childNode(withName: "mask") as? SKSpriteNode {
mask.removeFromParent()
let positionToSet = holder.position
holder.position = CGPoint.zero
mask.position = CGPoint.zero
let cropNode = SKCropNode()
holder.removeFromParent()
cropNode.addChild(holder)
cropNode.maskNode = mask
cropNode.position = positionToSet
cropNode.zPosition = 10
self.addChild(cropNode)
}
添加花絮
holder.move(toParent: cropNode)
可以用来代替
holder.removeFromParent()
cropNode.addChild(holder)