Я применяю постоянную скорость к одному из моих узлов, как это в функции обновления:
// Set a constant velocity to the right:
node.physicsBody?.velocity.dx = 300
Когда я печатаю скорость в функции didSimulatePhysics, она выводит около 290. Хорошо, я теряю некоторую скорость из-за linearDamping, это имеет смысл. Но это не остается постоянным.
Каждые 10-15 секунд будет происходить необъяснимое дрожание скорости (из печати didSimulatePhysics). Для 6 или 7 кадров скорость будет колебаться в пределах 285-295. Медленнее, потом быстрее. Так что я возьму 287, потом 294, потом 286, потом 294. Никогда два медленных или два быстрых подряд.
Это мой главный персонаж, за которым следит моя камера, и небольшое изменение скорости заставляет камеру дрожать всякий раз, когда это происходит.
Я далек от каких-либо коллизий, но обратите внимание, что я игнорирую коллизии на этом узле, а реституция установлена на 0:
node.physicsBody?.collisionBitMask = 0
node.physicsBody?.restitution = 0
Моделирование физики отстает, а затем пытается компенсировать это на следующем кадре (FPS привязан к 60)? Или, возможно, столкнулись с проблемами округления?
Есть ли способ получить точно постоянную скорость в одном направлении в каждом кадре?
Добавляем пример фактического изменения node.position.x за кадр при движении прямо по воздуху без столкновений, устанавливая speed.dx на 300 при каждом обновлении:
3.82861328125 // this is the norm - thousands of these before this blip)
3.82861328125
3.82861328125
5.740478515625 // blip begins
1.9150390625
3.82861328125
5.740478515625
1.9150390625
5.740478515625
1.9150390625
5.740478515625
1.9150390625
5.740478515625
3.82861328125 // blip ends
3.82861328125
3.82861328125