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