【问题标题】:How to contain SKEmitterNode particles in parent Node?如何在父节点中包含 SKEmitterNode 粒子?
【发布时间】:2016-01-16 19:07:47
【问题描述】:

我想向 SKNode 添加一个 SKEmitterNode,但它的粒子留在父节点的框架内。有点像 UIView 上的 clipsToBounds 属性。

示例:来自发射器的粒子不应离开黑色方形 SKSpriteNode:

【问题讨论】:

    标签: sprite-kit skemitternode


    【解决方案1】:

    您可以使用 SKCropNode 来做到这一点。像这样:

    if let particles = SKEmitterNode(fileNamed: "rain.sks") {
    
                let cropNode = SKCropNode()
                cropNode.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
                cropNode.zPosition = 3
    
                cropNode.maskNode = SKSpriteNode(color: SKColor.blackColor(), size: CGSize(width: 150, height: 150))
                cropNode.addChild(particles)
    
                addChild(cropNode)
    
            }
    

    不幸的是,这只适用于 iOS8...当您尝试在 iOS9 中将发射器添加到裁剪节点时,您可能会遇到一些问题,例如。什么都不会被渲染,并且可能会发生 fps 下降。这是已知的issue

    就像在那个链接中所说的那样,没有渲染粒子,实际上什么也没发生。就个人而言,我没有遇到过 fps 问题,但粒子肯定不会被渲染。

    一种解决方法是添加一个包含发射器的节点,然后屏蔽该容器节点。因此,让我们添加一个 SKSpriteNode 以使黑色背景与您的示例一样。我们称之为背景:

    if let particles = SKEmitterNode(fileNamed: "rain.sks") {
    
            let cropNode = SKCropNode()
            cropNode.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
            cropNode.zPosition = 3
    
            let blackNode = SKSpriteNode(color: .blackColor(), size: CGSize(width: 200, height: 200))
            blackNode.addChild(particles)
    
            cropNode.maskNode = SKSpriteNode(color: SKColor.blackColor(), size: CGSize(width: 200, height: 200))
    
            cropNode.addChild(blackNode)
    
            addChild(cropNode)
    
        }
    

    【讨论】:

    • 非常好,我也尝试使用 SKCroptNode,但我认为我添加了一个我认为正确的位置到黑色方形节点,使发射器不可见。谢谢老兄,这正是我所需要的
    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多