У меня есть спрайт с физическим телом. Чтобы переместить этот спрайт, в функции update() я постоянно устанавливаю скорость спрайта на 150 единиц, чтобы идти вправо, и -150, чтобы идти влево. (См. Прилагаемый код.)Выравнивание второго спрайта физическому телу первого спрайта в Spritekit/Swift
У меня есть второе физическое тело, которое я хотел бы следовать за первым спрайтом. Координаты этого второго физического тела находятся в нижней части первого, а 20 - справа.
Я бы хотел, чтобы второе физическое тело всегда следовало первым, со смещением.
Мой код в основном работает, но я заметил, что расстояние между первым и вторым телами изменяется незначительно, и я хочу, чтобы там не было никаких изменений. При движении вправо расстояние между ними немного сжато. При перемещении влево расстояние между ними немного увеличивается. Смотрите видео ЗДЕСЬ: https://www.youtube.com/watch?v=K9FhIdMwp7k
Вот код, я использую:
override func update(_ currentTime: TimeInterval) {
switch playerDirection {
case "stopped":
playerSpeed = 0.0
case "right":
playerSpeed = 150.0
case "left":
playerSpeed = -150.0
default:
print("default")
}
// ball is the first sprite and footBall is the second sprite:
ball.physicsBody?.velocity = CGVector(dx: playerSpeed, dy: ball.physicsBody!.velocity.dy)
footBall.position = CGPoint(x: (ball.position.x + 20), y: ball.position.y - (ball.size.height/2) + 4)
myCam.position = CGPoint(x: round(ball.position.x), y: self.size.height/2)
...
Я играл вокруг с помощью переопределения Func didSimulatePhysics() без успеха, а также ,
Я сделал другой тест, который просто позволяет использовать скорость для перемещения плеера, а вместо этого прямо увеличивает шарик.position.x (ball = player) и footBall.position.x, и когда я делаю это, все отлично выровнены. Но если я возьму этот маршрут, мне придется изменить, как работает моя физика игр в другом месте игры, что я бы предпочел проигнорировать.
Спасибо, что посмотрели.
Такого рода вещь прекрасно работает для добавления спрайтов в другой спрайт, но он не работает с физическими телами. Я просто выяснил приемлемое решение моей проблемы, которое использует SKPhysicsJoint https://developer.apple.com/reference/spritekit/skphysicsjoint. Но я до сих пор не знаю, почему в моем исходном посте был переменный разрыв сжатия/расширения. Возможно, я пойму, почему это случилось однажды. –
Спасибо за ваш ответ :) –