如何在 sprite Kit 场景中更改重力源
How to change gravity source in sprite Kit scene
我希望所有受重力影响的 SKNode 都转到我的 SKScene 视图中的水平线,而不是底部。像一条线一样的东西是重力杆。有什么办法吗?
您尝试过使用 SKFieldNode 吗?
它有各种关于物理的模拟;例如,它可以创建
class func radialGravityField() -> SKFieldNode
执行以下操作:
Creates a field node that accelerates physics bodies toward the field node.
编辑:
这是在 Playground 中完成的一个示例,说明 SKFieldNode 如何与 SKShapeNode 一起工作
override func didMove(to view: SKView) {
let sampleNodeRadius: CGFloat = 15
let gravityNode = SKFieldNode.radialGravityField()
let sampleNode = SKShapeNode(circleOfRadius: sampleNodeRadius)
sampleNode.fillColor = .red
sampleNode.physicsBody = SKPhysicsBody(circleOfRadius: sampleNodeRadius)
gravityNode.minimumRadius = 1000
gravityNode.strength = 50
addChild(gravityNode)
addChild(sampleNode)
physicsWorld.gravity = CGVector(dx: 0, dy: 0)
sampleNode.position = CGPoint(x: -100, y: -100)
gravityNode.position = CGPoint(x: 0, y: 0)
}
我希望所有受重力影响的 SKNode 都转到我的 SKScene 视图中的水平线,而不是底部。像一条线一样的东西是重力杆。有什么办法吗?
您尝试过使用 SKFieldNode 吗?
它有各种关于物理的模拟;例如,它可以创建
class func radialGravityField() -> SKFieldNode
执行以下操作:
Creates a field node that accelerates physics bodies toward the field node.
编辑:
这是在 Playground 中完成的一个示例,说明 SKFieldNode 如何与 SKShapeNode 一起工作
override func didMove(to view: SKView) {
let sampleNodeRadius: CGFloat = 15
let gravityNode = SKFieldNode.radialGravityField()
let sampleNode = SKShapeNode(circleOfRadius: sampleNodeRadius)
sampleNode.fillColor = .red
sampleNode.physicsBody = SKPhysicsBody(circleOfRadius: sampleNodeRadius)
gravityNode.minimumRadius = 1000
gravityNode.strength = 50
addChild(gravityNode)
addChild(sampleNode)
physicsWorld.gravity = CGVector(dx: 0, dy: 0)
sampleNode.position = CGPoint(x: -100, y: -100)
gravityNode.position = CGPoint(x: 0, y: 0)
}