2

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

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

在此处输入图像描述

4

1 回答 1

0

你可以用 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)

    }
于 2016-01-17T00:35:26.147 回答