У меня есть SKEmitterNode, сосредоточенный на моем плеере, чтобы оставить след частиц. У моего игрока есть физическое тело, и он перемещается по физике, а не вручную обновляет его положение.SKEmitterNode, испускающий частицы до физики, имитируется
Проблема, с которой я сталкиваюсь, заключается в том, что когда скорость моего игрока увеличивается, частицы испускаются из точки за игроком. Я обнаружил, что это происходит потому, что частицы испускаются в части «оценивать действия» цикла кадров. Затем мой плеер перемещается частью «имитировать физику».
Решение, которое я нашел в качестве обходного пути, заключается в перемещении SKEmitterNode (в обратном вызове) до точки, где мой игрок будет после вычислений физики. Это код, который я использовал:
particleEmitter.position = CGPointMake(
player.position.x + player.physicsBody!.velocity.dx * dt,
player.position.y + player.physicsBody!.velocity.dy * dt
)
UPDATE
На первом у меня был эмиттер в качестве дочернего узла игрока, то есть, когда я заметил эту проблему.
Я также попытался синхронизировать положение излучателя точно в положение игрока, не учитывая расстояние, перемещенное со времени последнего обновления (скорость * dt), та же проблема.
Вопрос в том, какой был бы правильный способ решения этого вопроса?
UPDATE 2
Я создал площадку, демонстрирующую проблему. Здесь у меня есть эмиттер, как ребенок игрока. Чем больше вы увеличиваете скорость игрока, тем больше разрыв между игроком и испускаемыми частицами.
https://github.com/ovidiupruteanu/SKEmitterNodeTest-Playground
Вот цикл кадр из яблок Docs
Что вы думаете? Вы ищете альтернативы вашей реализации? – rickster
После нескольких тестов и просмотра ответа @ 0x141E я нашел некоторые проблемы с моим обходным решением. Например, когда игрок достигает полной остановки (после путешествия с высокой скоростью), сталкиваясь с другим объектом, некоторые частицы генерируются за пределами точки, где мой плеер остановился. – Ovidiu