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 после ожидания.


person Fogmeister    schedule 15.08.2016    source источник
comment
все эмиттеры работают в свое время, когда они запущены   -  person Knight0fDragon    schedule 15.08.2016
comment
@Knight0fDragon Я так и предполагал, но не обновлял их по отдельности. Мне приходилось добавлять их в разное время, чтобы получить желаемый эффект. При увеличении времени симуляции все они перемещаются вперед только на одинаковую величину. Это сцена внутри SKView в приложении, отличном от SpriteKit, так что, возможно, это на что-то повлияло?   -  person Fogmeister    schedule 15.08.2016
comment
Я пишу ответ для вас   -  person Knight0fDragon    schedule 15.08.2016
comment
нет такой вещи, как SpriteKit app, если у вас есть SKView и вы имеете дело с SKScene, то вы имеете дело с набором спрайтов, независимо от шаблона, с которого вы начали   -  person Knight0fDragon    schedule 15.08.2016
comment
@Knight0fDragon а, хорошо. Справедливо. Буду ждать вашего ответа :)   -  person Fogmeister    schedule 15.08.2016


Ответы (1)


Единственное, что делает опережающее время, это перемотка действия эмиттера вперед во времени, не используйте это, когда вы хотите, чтобы эмиттеры срабатывали в разное время, прежде чем добавить эмиттер в вашу сцену, остановите его, установив paused в true, particleSpeed в 0 и вызов resetSimulation() Это гарантирует нам, что при добавлении эмиттера частиц он не запустится. Затем используйте SKAction, чтобы определить, когда вам нужно возобновить работу эмиттера и вернуть его скорость к скорости по умолчанию.

person Knight0fDragon    schedule 15.08.2016