如何在父节点中包含 SKEmitterNode 粒子?
How to contain SKEmitterNode particles in parent Node?
我想添加一个 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 下降。这已经是众所周知的issue。
就像 link 中所说的那样,没有渲染粒子,实际上什么也没有发生。就个人而言,我没有遇到过 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)
}
我想添加一个 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 下降。这已经是众所周知的issue。
就像 link 中所说的那样,没有渲染粒子,实际上什么也没有发生。就个人而言,我没有遇到过 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)
}