Swift 3(SpriteKit):将SKPhysicsBody与SKShapeNode对齐

时间:2016-12-17 22:40:43

标签: swift sprite-kit skphysicsbody skshapenode

我正在使用以下程序在我的程序中创建SKShapeNodes:

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

我遇到的问题是每当我将一个physicsBody添加到该行时,physicsBody都不会与该行对齐。我意识到这个问题是因为线的位置始终是CGPoint(x:0,y:0)所以无论线在哪里,physicsBody总是在屏幕的中心。这是我创建physicsBody的代码:

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

如果有人知道如何将physicsBody与行对齐,请回复您的解决方案。谢谢!

1 个答案:

答案 0 :(得分:4)

如果你想从一个点到另一个点建立一个物理体,你可以使用这样的东西:

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)
    }
}

这将使用两个点创建基于边缘的物理主体。边缘物理体在默认情况下是静态的,因此请记住这一点。要注册联系人(或与本机构发生碰撞),其他机构必须是动态的。

如果你想让这个身体充满活力,那么找一下volume based initializers