【发布时间】:2015-02-28 21:10:13
【问题描述】:
我的目标是让 firstBody 以恒定速度(在本例中为 500)“环绕”firstBody。
基于Constant movement in SpriteKit我已经实现了以下:
override func didMoveToView(view: SKView) {
physicsWorld.gravity = CGVector(dx: 0, dy: 0)
let firstNode = SKShapeNode(circleOfRadius: 10)
addChild(firstNode)
firstNode.position = CGPointMake(CGRectGetWidth(frame) / 2.0, CGRectGetHeight(frame) / 2.0)
let firstPhysicsBody = SKPhysicsBody(circleOfRadius: 10)
firstPhysicsBody.dynamic = false
firstNode.physicsBody = firstPhysicsBody
let secondNode = SKShapeNode(circleOfRadius: 10)
addChild(secondNode)
secondNode.position = CGPointMake(CGRectGetWidth(frame) / 2.0 + 40, CGRectGetHeight(frame) / 2.0 + 40)
let secondPhysicsBody = SKPhysicsBody(circleOfRadius: 10)
secondPhysicsBody.friction = 0
secondPhysicsBody.linearDamping = 0
secondPhysicsBody.angularDamping = 0
secondPhysicsBody.affectedByGravity = false
secondNode.physicsBody = secondPhysicsBody
let joint = SKPhysicsJointPin.jointWithBodyA(firstPhysicsBody, bodyB: secondPhysicsBody, anchor: firstNode.position)
joint.frictionTorque = 0
physicsWorld.addJoint(joint)
secondPhysicsBody.velocity = CGVector(dx: 0, dy: 500)
}
我遇到的问题是,随着时间的推移,secondNode 会变慢。你会注意到我在 SKPhysicsWorld 上设置了各种类型的东西,例如 gravity,friction linearDamping 和 angularDamping 在 SKPhysicsBody 和 frictionTorque 上 SKPhysicsJoint。
那么,我做错了什么?在-update 中进行可怕计算的情况下如何保持 secondNode 的速度不变?
另外 - 我知道我可以添加一个 SKAction 以遵循循环路径,但在这种情况下这不是一个合理的解决方案。
如果我遗漏了一些简单的东西,您能否建议我设置的“0”和“假”中的哪一个可以删除。
谢谢
【问题讨论】:
-
我对 Swift 不熟悉,但你为什么不检查和调整,如果需要,更新方法中的 dy 速度?
-
似乎我与之交谈的每个人都在暗示同样的问题。我觉得这有点小题大做,我应该依靠物理引擎来完成繁重的工作,但似乎我不应该像我准备的那样信任它……
标签: swift sprite-kit