SKEmitterNode粒子在开始时滞后

时间:2015-06-15 06:21:55

标签: ios xcode swift particles skemitternode

我在自己的小游戏中玩SKEmitterNode。我射击了一个炮弹,当球击中场景中的一个方框时,盒子被摧毁,并且粒子效果很简单,并且有一个简单的纹理" BOOM"创建框以在框消失时进行转换。问题是,当我启动发射器时,我希望它立即开始发射粒子,但事实并非如此,粒子在0.5-1s的短暂延迟后播放。

这是我创建发射器的功能:

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

1 个答案:

答案 0 :(得分:0)

解决方案是将advanceSimulationTime设置为恰好1.0秒。我不完全确定为什么会出现这种情况,但我认为创作“动画”会占用这个时间。

无论如何,案件结束并感谢所有人的帮助,特别是lchamp,因为他提出了解决方案。