Swift 3 (SpriteKit): выравнивание SKPhysicsBody в SKShapeNode

Я создаю SKShapeNodes в моей программе, используя это:

let points = [CGPoint(x: x, y: y), CGPoint(x: x2, y: y2)]
let line = SKShapeNode(points: &points, count: points.count)

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я добавляю в текст PhysBody, физика не выравнивается с линией. Я понимаю, что проблема заключается в том, что позиция линии всегда CGPoint(x: 0, y: 0), поэтому physBody всегда находится в центре экрана, независимо от того, где линия. Вот мой код для создания физики тела:

line.physicsBody = SKPhysicsBody(rectangleOf: (line.frame.size))

Если кто-нибудь знает, как вывести физическую телу на линию, ответьте, пожалуйста, на ваше решение. Спасибо!

1 ответ

Решение

Если вы хотите сделать физическое тело из одной точки в другую, вы можете использовать что-то вроде этого:

class GameScene:SKScene {

    override func didMove(to view: SKView) {
        var points = [CGPoint(x: 22, y: 22), CGPoint(x: 155, y: 155)]
        let line = SKShapeNode(points: &points, count: points.count)
        print(line.frame.size)

        line.physicsBody = SKPhysicsBody(edgeFrom: points[0], to: points[1])

        addChild(line)
    }
}

Это создаст основанное на ребре физическое тело, используя две точки. Физика ребер по умолчанию является статической, так что имейте это в виду. Чтобы зарегистрировать контакт (или сделать столкновение с этим телом), другое тело должно быть динамическим.

Если вы хотите, чтобы это тело было динамичным, ищите инициализаторы на основе тома.

Другие вопросы по тегам