首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >掩模SKSpriteNode

掩模SKSpriteNode
EN

Stack Overflow用户
提问于 2018-01-31 22:50:09
回答 1查看 483关注 0票数 0

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

哪里

  • 绿色- wordInfoHolder
  • 红色标签容器
  • whiteText标签

现在我想隐藏红色显示的部分。为了执行这样的操作,我读到可以使用SKCropNode

我能够在场景文件中找到我的所有节点并将它们保存到变量中。

代码语言:javascript
复制
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个对象都被存储和更正。

现在,我想向根对象添加一些掩码。

为此,我准备了面具图像:

试着去做这样的事情:

代码语言:javascript
复制
  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的绿色部分。

做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 23:45:28

假设您已经在所有对象上设置了zPosition。

我确信问题是,因为您将持卡人对象从场景移动到cropNode,所以它保留了来自场景的位置信息(例如,如果它在场景中的位置是500,500,那么它在cropNode中的位置现在是500,500)

我能够重新创建您的问题,通过将holder.position设置为零,问题就消失了。

在下面的图片中,我使用黄色框作为掩码,蓝色和粉红色的盒子是测试对象,以确保cropNode被放置在它们之间。

代码语言:javascript
复制
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

代码语言:javascript
复制
holder.move(toParent: cropNode)

可以用来代替

代码语言:javascript
复制
holder.removeFromParent()
cropNode.addChild(holder)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48552750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档