我向我的sks文件中添加了几个节点,现在我想向最底层的节点SKSpriteNode添加一些掩码。结构如下:

哪里
现在我想隐藏红色显示的部分。为了执行这样的操作,我读到可以使用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的绿色部分。
做错什么了?
发布于 2018-01-31 23:45:28
假设您已经在所有对象上设置了zPosition。
我确信问题是,因为您将持卡人对象从场景移动到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)
}添加tidbit
holder.move(toParent: cropNode)可以用来代替
holder.removeFromParent()
cropNode.addChild(holder)https://stackoverflow.com/questions/48552750
复制相似问题