Ускорение часов в физике для спрайта
У меня есть анимация, использующая мир физики спрайтекитов. Я искал, есть ли способ "перемотать вперед" через физику и просто получить результат или путь без отображения анимации. Я смотрел на PhysicsWorld и ничего не видел для этого? Есть идеи, как я могу это сделать?
В основном я хочу показать пользователю результирующее местоположение анимации, прежде чем он решит выполнить.
1 ответ
Видимо, вы пропустили speed
недвижимость в SKPhysicsWorld:
По умолчанию установлено значение 1,0, что означает, что симуляция выполняется с нормальной скоростью. Значение, отличное от значения по умолчанию, изменяет скорость, с которой время проходит в симуляции физики. Например, значение скорости 2,0 указывает, что время в симуляции физики проходит в два раза быстрее, чем время симуляции сцены. Значение 0,0 приостанавливает физическое моделирование.
Имейте в виду, что это повлияет на все тела, и нет встроенного способа вернуть систему в предыдущее состояние. Кроме того, симуляция должна продвигаться как минимум на 1 шаг, чтобы изменение стало видимым, поэтому вам нужно установить свойство скорости, скажем, 30 в update
или же didEvaluateActions
метод и сбросьте его обратно на 1 в didSimulatePhysics
, Это также метод, при котором вы проверяете результат шага ускоренной перемотки вперед.
Если тело движется с фиксированной скоростью и не будет подвержено никаким воздействиям, таким как столкновения или гравитация, вы можете использовать чистую тригонометрию (и вам не понадобится свойство скорости), чтобы найти, где тело будет в n шагах или сколько шаги, которые потребуются организму, чтобы путешествовать, по крайней мере, на расстояние n.
Я не могу придумать способ продвижения вперед, пока тело не достигнет определенного пункта назначения, где тело не движется с фиксированной скоростью, и у вас нет простого способа предсказать время прибытия без фактического запуска физического моделирования. Это потребовало бы возможности продвигать мир независимо от остальной части сцены (и обеспечить защиту с тайм-аутом против того, чтобы тело фактически никогда не попадало туда), что было бы возможно только с помощью стороннего физического движка. Вы все еще можете использовать Box2D или Бурундука со Sprite Kit, хотя.