我一直试图通过使用
来改变引力override func touchesBegan(_ touches: Set<UITouch>, with event:
UIEvent?) {
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
}
但这似乎并没有改变引力。当我在didMove函数中使用相同的代码时,它可以工作。
编辑1:
以下是我的SKSpriteNode的代码:
spaceship = SKSpriteNode(imageNamed: "Spaceship")
spaceship.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
spaceship.setScale(0.1)
spaceship.physicsBody?.isDynamic = true
spaceship.physicsBody = SKPhysicsBody(circleOfRadius: spaceship.size.width / 2);
addChild(spaceship)
答案 0 :(得分:1)
它适用于didMove
因为对象没有施加任何力,因此它们仍然是
当您在游戏中改变重力时,物体仍然处于前一次引力的运动中 - 改变重力仅影响/未来/施加在物体上的力。
您需要更改重力,以及您希望在触摸功能中受影响的节点的速度,以获得所需的效果。
此外,为了简洁起见,您可以直接访问dy
值,而无需为其分配新的CGVector
- 这也有助于提高性能。
spaceship.physicsBody!.velocity.dy = 0