使节点受重力影响没有影响; Swift

Making a node affected by gravity has no affect; Swift

所以,我正在尝试使用 Sprite Kit 和 Swift 制作一个简单的游戏。在我的游戏中,我有从天而降的障碍物。它们是小圆圈。这是我的圈子代码:

func createObstacle(){

    var ball = SKShapeNode(circleOfRadius: 20 )
    var width = UInt32(self.frame.width)
    var random_number = arc4random_uniform(width)
    ball.position = CGPointMake(CGFloat(random_number), frame.height)
    ball.strokeColor = SKColor.blackColor()
    ball.glowWidth = 1.0
    ball.fillColor = SKColor.blueColor()
    ball.physicsBody?.affectedByGravity = true
    self.addChild(ball)
}

这很简单。然而,这一行

ball.physicsBody?.affectedByGravity = true

似乎并没有实际影响节点。这不会做任何事情,并且在模拟器中没有视觉上显示的引力。我不知道为什么这不起作用。有人知道为什么吗?

编辑代码:

func createObstacle(){

    var ball = SKShapeNode(circleOfRadius: 20 )
    var width = UInt32(self.frame.width)
    var random_number = arc4random_uniform(width)
    ball.position = CGPointMake(CGFloat(random_number), frame.height)
    ball.strokeColor = SKColor.blackColor()
    ball.glowWidth = 1.0
    ball.fillColor = SKColor.blueColor()
    ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)
    ball.physicsBody?.affectedByGravity = true
    self.addChild(ball)
}

您还没有向 SKShapeNode 添加 SKPhysicsBody,因此 ball.physicsBodynilaffectedByGravity 未设置。

要添加物理体,您可以执行以下操作:

ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)

现在你可以设置affectedByGravity:

ball.physicsBody!.affectedByGravity = true

编辑:

physicsWorld.gravityCGVector 应该是:

// Note the minus sign.
physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)