簡體   English   中英

遮罩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。

我非常確定問題是,因為您要將持有人對象從場景移動到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM