【发布时间】:2019-01-25 15:41:55
【问题描述】:
我有一个以 ω 角速度旋转的纺车,不涉及加速度,使用 SpriteKit 实现。
当用户按下按钮时,我需要从当前角度 ∂0 缓慢减速车轮并最终到达指定角度(我们称之为 ∂f)。
我创建了一个与它相关联的 mass 或 2。
我已经尝试过angularDamping 和SKAction.rotate(toAngle: duration:) 但它们不符合我的需求,因为:
- 使用
angularDamping,我无法简单地指定∂f我想要结束的角度。 - 使用
SKAction.rotate(toAngle: duration:),我无法从当前的旋转速度开始减慢速度,它的表现也不自然。
我尝试的唯一剩下的方法是使用SKAction.applyTorque(duration:)。
这听起来很有趣,但我在计算公式以获得正确的扭矩应用时遇到问题,尤其是对于车轮的惯性和半径。
这是我的方法:
我将起始角速度
ω设为:wheelNode.physicsBody?.angularVelocity.我要从
wheelNode.physicsBody?.mass接mass时间
t是10的常数(这意味着我希望轮子在10 秒内减速到最终角度∂f)。我计算的减速度为:
let a = -1 * ω / t惯性应该是:
let I = 1/2 * mass * pow(r, 2)*。 (请参阅有关半径的注释)然后,最后,我计算了要应用的最终扭矩:
let t = I * a(注意与车轮当前的角速度相反)。
注意:
由于我不清楚如何获得轮子的半径我试图抓住它来自:
-
wheelNode.physicsBody?.area为let r = sqrt(wheelNode.physicsBody?.area ?? 0 / .pi) - 通过将像素转换为米为area documentation says。然后我有
let r = self.wheelNode.radius / 150。
有趣的是:我得到了 2 个不同的值 :(
不幸的是这种方法中的某些东西不起作用,因为到目前为止我不知道如何以指定的角度结束并且车轮无论如何都不会停止(或者扭矩太多向另一个方向旋转,或者还不够)。因此,施加的扭矩似乎也是错误的。
您知道实现我需要的结果的更好方法吗?这是正确的方法吗?如果是,我的计算有什么问题?
【问题讨论】:
标签: ios swift sprite-kit