我试图让一个简单的 SKSpriteNodeSKFieldNode.radialGravityField()
一旦进入其定义的SKRegion
. 我通过 将场景的重力设置为零self.physicsWorld.gravity = CGVectorMake(0.0, 0.0)
。
我正在尝试模拟真实空间。我听说过使用关节,但这似乎不像使用真实重力计算那样流畅。这里有什么想法吗?
编辑:到目前为止,我的代码无法正常工作。它将一个物体送入a radialGravityField()
,但不会完美地围绕它(甚至接近完美)。它确实绕轨道运行,但在一个狂野的椭圆中。当我说完美时,我的意思是围绕着重力场中心的圆形。
补充:我只是在考虑使用radialGravityField()
. 也许在update
方法中只计算飞行物体的位置会更容易。如果它的位置在行星的半径内,则使用 SKJoint 并使其轨道运行。以前有人做过吗?
先感谢您!
到目前为止,这是我的代码...
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0)
self.view?.backgroundColor = UIColor.darkGrayColor()
let circle = SKShapeNode(circleOfRadius: 30.0)
circle.position = CGPoint(x: self.frame.width / 2 + 10, y: self.frame.height / 2)
circle.fillColor = .whiteColor()
addChild(circle)
let gravityField = SKFieldNode.radialGravityField()
gravityField.position = circle.position
gravityField.region = SKRegion(radius: 100.0)
gravityField.strength = 4.0
gravityField.enabled = true
addChild(gravityField)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
let p = SKSpriteNode(color: UIColor.purpleColor(), size: CGSize(width: 20, height: 20))
p.physicsBody = SKPhysicsBody(rectangleOfSize: p.size)
p.physicsBody?.dynamic = true
p.physicsBody?.mass = 0.5
p.position = touches.first!.locationInNode(self)
addChild(p)
p.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 300 * p.physicsBody!.mass))
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}