SpriteKit - подпрыгивающий узел постоянной скорости / скорости? - PullRequest
0 голосов
/ 02 апреля 2019

enter image description here

Простая настройка - у меня есть узлы прыгающего шара (синий) и узлы статического шара (зеленый).Серая коробка имеет физическое тело SKPhysicsBody(edgeLoopFrom: box.frame), поэтому она не позволяет прыгающему мячу двигаться наружу.Я установил скорость узла прыгающих шариков (синий) в случайное значение CGVector при создании, и он начинает двигаться.Он отскакивает от статического шарового узла (зеленого цвета) и от краев серого поля.

Моя общая настройка SKPhysicsBody со всеми узлами:

node.physicsBody?.restitution = 1
node.physicsBody?.friction = 0.0
node.physicsBody?.linearDamping = 0.0
node.physicsBody?.angularDamping = 0.0

Мой вопрос:Как мне убедиться, что прыгающий мяч движется с постоянной скоростью ?После пары отскоков узел либо ускоряется, либо замедляется.

1 Ответ

0 голосов
/ 09 апреля 2019

Чтобы добиться этого, я нормализовал вектор всякий раз, когда физический движок обнаруживает столкновение.Таким образом, в func didBegin(_ contact: SKPhysicsContact) происходит следующее:

let length = hypotf(Float(node.velocity.dx), Float(node.velocity.dy)) 
let multiplier = (290.0 / length)
firstBody.velocity.dx *= CGFloat(multiplier)
firstBody.velocity.dy *= CGFloat(multiplier)

290.0 - произвольное значение, определяющее скорость мяча.

Для справки проверьте этот ответ .

...