[英]Mask SKSpriteNode
我在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
綠色部分。
做錯了什么?
假設已在所有對象上設置了zPosition。
我非常確定問題是,因為您要將持有人對象從場景移動到cropNode,所以它會保留場景中的位置信息(例如,如果場景中的位置為500,則cropNode中的位置為500現在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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.