SKEmitterNode 没有从父级中删除自己?
SKEmitterNode isn't removing itself from parent?
我将 SKEmitterNode 添加为我的 mainScene 的子节点,并且超出预期它将在 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 属性如下图所示
当我 运行 时,发射器不会从屏幕上移除。
我不知道要添加什么,如果您需要更多信息,请提出任何帮助,我们将不胜感激。
particleLifetime 确定粒子的平均寿命,以秒为单位。这不会影响从父节点中删除 SKEmitterNode。
numOfParticlesToEmit指的是粒子编辑器Particles区域中的Maximum字段决定了数量发射器在停止前应发射的粒子数。这也不影响从父级中删除 SKEmitterNode 。另请注意,您已在此字段中设置 0,这将启用无限发射。
因此,如果您想在发射器完成发射后从父节点移除节点,您可以设置要发射的粒子数(字段名为 Maximum in Particles 编辑器内的区域)和 运行 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 文件的保管箱 link:Effect.sks
将你的粒子 "BirthRate" 和 "Maximum" 都设置为 20。将最大值设置为 0 将重复出生。
我将 SKEmitterNode 添加为我的 mainScene 的子节点,并且超出预期它将在 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 属性如下图所示
当我 运行 时,发射器不会从屏幕上移除。
我不知道要添加什么,如果您需要更多信息,请提出任何帮助,我们将不胜感激。
particleLifetime 确定粒子的平均寿命,以秒为单位。这不会影响从父节点中删除 SKEmitterNode。
numOfParticlesToEmit指的是粒子编辑器Particles区域中的Maximum字段决定了数量发射器在停止前应发射的粒子数。这也不影响从父级中删除 SKEmitterNode 。另请注意,您已在此字段中设置 0,这将启用无限发射。
因此,如果您想在发射器完成发射后从父节点移除节点,您可以设置要发射的粒子数(字段名为 Maximum in Particles 编辑器内的区域)和 运行 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 文件的保管箱 link:Effect.sks
将你的粒子 "BirthRate" 和 "Maximum" 都设置为 20。将最大值设置为 0 将重复出生。