我想在SKNode中添加一个SKEmitterNode,但是它的粒子会留在父节点的框架内。有点像UIView上的clipsToBounds属性。
示例:发射器中的粒子不应该留下黑色正方形SKSpriteNode:
答案 0 :(得分: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下降。这已经为人所知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)
}