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)
当我运行它时,不会从屏幕上删除发射器.
如果您需要更多信息,我不知道该添加更多信息请向任何帮助表示感谢.
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