Sprite kit 如何在父节点中包含SKEmitterNode粒子?

Sprite kit 如何在父节点中包含SKEmitterNode粒子?,sprite-kit,skemitternode,Sprite Kit,Skemitternode,我想将SKEmitterNode添加到SKNode,但其粒子保留在父节点的帧内。有点像UIView上的clipsToBounds属性 示例:发射器中的粒子不应离开黑色方形SKSpriteNode: 您可以使用SKCropNode来完成。像这样: if let particles = SKEmitterNode(fileNamed: "rain.sks") { let cropNode = SKCropNode() cropNode.positio

我想将SKEmitterNode添加到SKNode,但其粒子保留在父节点的帧内。有点像UIView上的clipsToBounds属性

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


您可以使用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下降。这是众所周知的

就像在那个链接中说的那样,没有渲染粒子,实际上什么都没有发生。就我个人而言,我没有遇到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,但我想我添加了一个我认为正确的位置到黑色方形节点,使发射器不可见。谢谢,伙计,这正是我需要的