Используйте PhysicsBody с линией SKShapenode. Swift, iOS, SpriteKit

Мне нужно добавить простую строку, используя ShapeBody для взаимодействия. Я пробую код ниже, Xcode дает мне следующий ответ:

PhysicsBody: Не удалось создать физическое тело.

        let testPath = UIBezierPath()
        testPath.move(to: CGPoint(x:-100, y: 200))
        testPath.addLine(to: CGPoint(x:100, y: 200))

        let testShape = SKShapeNode()
        testShape.path = testPath.cgPath
        testShape.position = CGPoint(x:0, y:250)
        testShape.zPosition = 5
        testShape.lineWidth = 5
        testShape.strokeColor = .red
        testShape.physicsBody = SKPhysicsBody(polygonFrom: testPath.cgPath)

person Bohdan Kovalenko    schedule 06.06.2018    source источник


Ответы (2)


Использовал edgeChainFrom вместо polygonFrom, и это работает!

testShape.physicsBody = SKPhysicsBody(edgeChainFrom: testPath.cgPath)
person Bohdan Kovalenko    schedule 06.06.2018
comment
это означает, что ваше физическое тело не имеет объема и не является динамическим - person Knight0fDragon; 06.06.2018

Путь не может пересекать ни одну из своих линий с помощью SKPhysicsBody, ваша линия должна быть тонким прямоугольником.

    let testPath = UIBezierPath()
    testPath.move(to: CGPoint(x:-100, y: 200))
    testPath.addLine(to: CGPoint(x:100, y: 200))
    testPath.addLine(to: CGPoint(x:100, y: 201))
    testPath.addLine(to: CGPoint(x:-100, y: 201))
    testPath.close()
    let testShape = SKShapeNode()
    testShape.path = testPath.cgPath
    testShape.position = CGPoint(x:0, y:250)
    testShape.zPosition = 5
    testShape.lineWidth = 5
    testShape.strokeColor = .red
    testShape.physicsBody = SKPhysicsBody(polygonFrom: testPath.cgPath)
person Knight0fDragon    schedule 06.06.2018