5

我将 SKEmitterNode 添加为我的 mainScene 的 childNode 并且超出预期它会在particleLifetime结束时被删除,描述为apple docs

添加了这样的发射器;

    var emitterPath : String = NSBundle.mainBundle().pathForResource("ShipFire", ofType: "sks")!
    var emitter : SKEmitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath) as! SKEmitterNode

    emitter.position = position
    emitter.particleLifetime = 0.1;

    self.addChild(emitter)

我的 SKEmitterNode 属性如下图所示 ShipEngine.sks

当我运行它时,发射器不会从屏幕上移除。

模拟器

如果您需要更多信息,我不知道要添加更多信息,请寻求任何帮助,将不胜感激,谢谢。

4

2 回答 2

18

particleLifetime确定粒子的平均寿命,以秒为单位。这不会影响从父级删除 SKEmitterNode。

numOfParticlesToEmit指的是粒子编辑器的粒子区域中的最大字段,它决定了发射器在停止之前应该发射的粒子数。这也不影响从父级删除 SKEmitterNode 。另请注意,您已在此字段中设置 0,这将启用无限发射。

因此,如果您想在发射器完成发射后从父节点中移除节点,您可以设置要发射的粒子数(编辑器内粒子区域中称为最大值的字段)并运行一个 SKAction 序列,该序列将:

  • 启动发射器
  • 等待一段时间
  • 并从父级移除发射器(此时发射器应该完成发射)

这是一个简单的示例,向您展示如何使用 SKAction 序列执行此操作:

class GameScene: SKScene {


    let emitter : SKEmitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(NSBundle.mainBundle().pathForResource("MyParticle", ofType: "sks")!) as SKEmitterNode
    override func didMoveToView(view: SKView) {

        self.backgroundColor = SKColor.blackColor()


    }

    func addEmitter(position:CGPoint){

        var emitterToAdd   = emitter.copy() as SKEmitterNode

        emitterToAdd.position = position

        let addEmitterAction = SKAction.runBlock({self.addChild(emitterToAdd)})

        var emitterDuration = CGFloat(emitter.numParticlesToEmit) * emitter.particleLifetime

        let wait = SKAction.waitForDuration(NSTimeInterval(emitterDuration))

        let remove = SKAction.runBlock({emitterToAdd.removeFromParent(); println("Emitter removed")})

        let sequence = SKAction.sequence([addEmitterAction, wait, remove])

        self.runAction(sequence)


    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {


        let touch: AnyObject? = touches.anyObject()

        let location = touch?.locationInNode(self)

        self.addEmitter(location!)



    }


}

这是结果(注意在发射完成后节点的计数是如何变化的):

从场景中移除发射器

希望这可以帮助

编辑:

对于那些对如何制作与上面视频类似的效果感兴趣的人,请尝试以下操作:

发射器设置

关键是使用颜色渐变,并为混合模式选择添加。

这是 .sks 文件的 Dropbox 链接:Effect.sks

于 2015-07-30T18:30:51.610 回答
0

将粒子“BirthRate”和“Maximum”都设置为 20。将最大值设置为 0 将重复出生。

图片

于 2015-12-10T15:15:54.880 回答