2016-08-15 85 views
0

我已经在我的项目中创建了一个模板粒子文件,并希望将它用于不同的纹理图像。SKEmitterNode具有不同的模拟时间

我创建了这一点,并使用此方法...

func addEmitterWithTexture(image: UIImage, size: CGSize, advanceTime: NSTimeInterval, scene: SKScene) { 
    let emitter = SKEmitterNode(fileNamed: "MyParticle")! 
    scene.addChild(emitter) 
    emitter.particleTexture = SKTexture(image: image) 
    emitter.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5) 
    emitter.particlePositionRange = CGVector(dx: size.width, dy: size.height) 
    emitter.advanceSimulationTime(advanceTime) 
    emitter.zPosition = 3.0 
} 

我想的图像在不同时期流行的,所以我使用advanceSimulationTime。但它似乎没有效果。所有图像使用相同的模拟时间。

我猜这是因为模拟时间是父母?

编辑 嗯......似乎并非如此。

我不知道是否所有的发射器都在全局模拟计时器上吗?在那种情况下,有什么办法在不同的时间启动发射器?

是这样或我做错了什么?

最后,我通过在场景中使用waitAction并在等待后的runBlock动作中添加发射器来解决这个问题。

+0

所有发射器在启动时都运行在自己的时间 – Knight0fDragon

+0

@ Knight0fDragon这就是我所假设的,但它并未更新他们单独。我不得不在不同的时间添加它们以获得我想要的效果。推进模拟时间只能将它们全部转发相同的数量。这是一个在非SpriteKit应用程序中的SKView内的场景,所以这可能会影响到一些东西? – Fogmeister

+0

我写你 – Knight0fDragon

回答

0

是提前时间做的唯一事情是快进的时间发射行动前,不要当你要发射火在不同的时间使用它,你将发射器添加到您的场景前,通过设置paused阻止它true,particleSpeed设置为0,并调用resetSimulation()这保证我们在添加粒子发射器时不会运行。然后使用SKAction's来确定何时需要取消暂停发射器并将其速度恢复到其默认速度

相关问题