SKEmitterNode 粒子在开始时滞后
SKEmitterNode particles lag at start
我正在自己的小游戏中玩 SKEmitterNode。我正在射击炮弹,当炮弹击中场景中的一个盒子时,盒子会被破坏,并创建一个具有简单纹理 "BOOM" 的粒子效果,以便在盒子消失时进行过渡。问题是,当我启动发射器时,我希望它立即开始发射粒子,但事实并非如此,粒子会在 0.5-1 秒的短暂延迟后播放。
这是我创建发射器的函数:
func createParticleEmitter(fileName: String) -> SKEmitterNode
{
let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "sks")
assert(path != nil, "Could not find file \(fileName)")
let obj : AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithFile(path!)
assert(obj != nil, "The emiter \(fileName) could not be created")
return obj as! SKEmitterNode
}
然后在碰撞时调用这个函数,其中position是垂死物体的位置,scene是垂死物体的父场景:
func addOnDeathParticles(position: CGPoint, scene : SKNode)
{
var emitter : SKEmitterNode = createParticleEmitter("boom")
emitter.position = position
let seq = [SKAction.waitForDuration(PARTICLE_DIE_DURATION,
withRange:PARTICLE_DIE_DURATION_RANGE),
SKAction.removeFromParent()]
emitter.runAction(SKAction.sequence(seq))
scene.addChild(emitter)
}
添加动作列表,使发射器在PARTICLE_DIE_DURATION后消失,随机值为PARTICLE_DIE_DURATION_RANGE。
据我了解,一旦发射器连接到场景,它就应该开始发射粒子。但正如我在开头提到的,情况并非如此,粒子在 0.5-1 秒后开始出现。
创建的粒子只是一个按比例放大并缓慢旋转的纹理,但没有设置延迟(甚至不确定你是否可以这样做)。
有没有人有同样的行为或对我做错了什么提出建议?
很高兴得到任何帮助:)
干杯,TK
解决方案是将 advanceSimulationTime 设置为正好 1.0 秒。我不完全确定为什么会这样,但我想这次创作 "animation" 占用了时间。
无论如何,案例结束了,感谢大家的帮助,尤其是 lchamp,因为他提出了解决方案。
我正在自己的小游戏中玩 SKEmitterNode。我正在射击炮弹,当炮弹击中场景中的一个盒子时,盒子会被破坏,并创建一个具有简单纹理 "BOOM" 的粒子效果,以便在盒子消失时进行过渡。问题是,当我启动发射器时,我希望它立即开始发射粒子,但事实并非如此,粒子会在 0.5-1 秒的短暂延迟后播放。
这是我创建发射器的函数:
func createParticleEmitter(fileName: String) -> SKEmitterNode
{
let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "sks")
assert(path != nil, "Could not find file \(fileName)")
let obj : AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithFile(path!)
assert(obj != nil, "The emiter \(fileName) could not be created")
return obj as! SKEmitterNode
}
然后在碰撞时调用这个函数,其中position是垂死物体的位置,scene是垂死物体的父场景:
func addOnDeathParticles(position: CGPoint, scene : SKNode)
{
var emitter : SKEmitterNode = createParticleEmitter("boom")
emitter.position = position
let seq = [SKAction.waitForDuration(PARTICLE_DIE_DURATION,
withRange:PARTICLE_DIE_DURATION_RANGE),
SKAction.removeFromParent()]
emitter.runAction(SKAction.sequence(seq))
scene.addChild(emitter)
}
添加动作列表,使发射器在PARTICLE_DIE_DURATION后消失,随机值为PARTICLE_DIE_DURATION_RANGE。
据我了解,一旦发射器连接到场景,它就应该开始发射粒子。但正如我在开头提到的,情况并非如此,粒子在 0.5-1 秒后开始出现。 创建的粒子只是一个按比例放大并缓慢旋转的纹理,但没有设置延迟(甚至不确定你是否可以这样做)。
有没有人有同样的行为或对我做错了什么提出建议? 很高兴得到任何帮助:)
干杯,TK
解决方案是将 advanceSimulationTime 设置为正好 1.0 秒。我不完全确定为什么会这样,但我想这次创作 "animation" 占用了时间。
无论如何,案例结束了,感谢大家的帮助,尤其是 lchamp,因为他提出了解决方案。