Редактировать - Я создал пример проекта для демонстрации рассчитанных путей с множителем и без него.
https://github.com/emilioschepis/spritekit-gravity-sample
TL; DR - При вычислении чего-либо, связанного с гравитацией в SpriteKit, умножьте гравитацию сцены на 151 , чтобы получить точный результат.
При попытке Чтобы решить эту проблему, я впервые начал читать документацию SpriteKit, относящуюся к гравитации:
https://developer.apple.com/documentation/spritekit/skphysicsworld/1449623-gravity
В документации сказано:
компоненты этого свойства измеряются в метрах в секунду. Значение по умолчанию (0.0, -9.8), которое представляет гравитацию Земли.
Гравитация, однако рассчитывается в m/s^2
, а не в m/s
.
Думая, что было ошибка в реализации гравитации в SpriteKit. Я начал думать, что, возможно, физика, основанная на реальных условиях, l aws не может быть применена на сцене.
Однако я наткнулся на другую страницу документации о линейное гравитационное поле, которое правильно сообщило, что гравитация измеряется в m/s^2
в SpriteKit.
https://developer.apple.com/documentation/spritekit/skfieldnode/1520145-lineargravityfield
Затем я настраиваю простую свободную падающую сцену, где я применил начальная скорость к физическому телу, а затем вычислила ожидаемую траекторию, сравнивая ее с фактической траекторией.
Вычисления по оси X были точными с самого начала, предполагая, что единственная проблема была со значением гравитации.
Затем я попытался вручную изменить гравитацию в сцене, пока фактическая траектория не совпала с предсказанной.
Что я нашел и заключается в том, что существует значение "magi c" ~ 151 , которое необходимо учитывать при использовании свойства гравитации мира физики в игре.
Изменение, например, расчеты по оси Y для траектории от
let dy = velocity.dy * time + 0.5 * gravity * pow(time, 2)
до
let dy = velocity.dy * time + 0.5 * 151 * gravity * pow(time, 2)
привели к точным вычислениям.
Я надеюсь, что это полезно для тех, кто может столкнуться с той же проблемой в будущем.