【问题标题】:SKEmitterNode with different simulation times具有不同模拟时间的 SKEmitterNode
【发布时间】:2016-08-15 13:14:47
【问题描述】:

我在我的项目中创建了一个模板粒子文件,并希望将它与不同的纹理图像一起使用。

我已经创建了这个并使用了这个方法......

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 操作中解决了这个问题。

【问题讨论】:

  • 所有发射器在启动时按自己的时间运行
  • @Knight0fDragon 这就是我的假设,但它并没有单独更新它们。我不得不在不同的时间添加它们以获得我想要的效果。推进模拟时间只会使它们全部向前推进相同的数量。这是非 SpriteKit 应用程序中 SKView 内的场景,所以可能会影响到什么?
  • 我正在为你写一个答案
  • 没有SpriteKit app这样的东西,如果你有一个SKView并且正在处理SKScene,那么你正在处理sprite kit,无论你开始使用什么模板
  • @Knight0fDragon 啊,好的。很公平。将等待您的答复:)

标签: swift sprite-kit skemitternode


【解决方案1】:

advance time 唯一能做的就是让发射器动作在时间上快进,当你想让发射器在不同的时间发射时不要使用这个,在你将发射器添加到你的场景之前,通过设置paused来停止它为真,particleSpeed 为 0 并调用 resetSimulation() 这保证了当添加粒子发射器时它不会运行。然后使用SKAction 确定何时需要取消暂停发射器并将其速度设置回默认速度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多