SKEmitterNode是不是从父母身上移除了自己?

mer*_*ert 3 ios sprite-kit skemitternode swift ios8

我添加了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)
Run Code Online (Sandbox Code Playgroud)

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

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

模拟器

如果您需要更多信息,我不知道该添加更多信息请向任何帮助表示感谢.

Whi*_*ind 15

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!)



    }


}
Run Code Online (Sandbox Code Playgroud)

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

从场景中删除发射器

希望这可以帮助

编辑:

对于那些对如何通过上面的视频产生类似效果感兴趣的人,请尝试使用以下内容:

发射器设置

关键是使用Color Ramp,并为混合模式选择Add.

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