SpriteKit Physics 的神秘因子 150。重力和力量

Mysterious factor of 150 on SpriteKit's Physics. Gravity and Forces

我想要一个物体漂浮在屏幕上,抵抗重力,根本不动。

这是视图的重力设置。

    self.physicsWorld.gravity = CGVector(dx: 0, dy: 5.0)

设置为5m/s^2以上。所以物体每秒向上加速 5 米

物体质量设置为1.0kg

    self.physicsBody?.mass = 1.0

我对物体施加了一个力,所以它可以抵抗重力。所以我做了以下。

func update(delta: TimeInterval) {
    ...

    let force = CGVector(dx: 0.0, dy: -5.0)
    self.physicsBody?.applyForce(force)
}

我应用了-5N,因为我认为施加在物体上的重力是1kg * 5m/s^2 = 5N。应用-5N会使物体以-5m/s^2的速度加速,并因重力漂浮在屏幕上。

但是没有用。相反,我不得不这样做。

    let force = CGVector(dx: 0.0, dy: -5.0 * 150.0)

-5 乘以 150-750。那么,这个150是从哪里来的呢?为什么我必须应用 -750N 而不是 -5N 来使物体抵抗重力?

我还测试了不同重力设置下的不同质量和力。

self.physicsBody?.mass = 2.0
let force = CGVector(dx: 0.0, dy: -5.0 * 150.0 * 2)

self.physicsWorld.gravity = CGVector(dx: 0, dy: 15.0)
self.physicsBody?.mass = 2.0
let force = CGVector(dx: 0.0, dy: -15.0 * 150.0 * 2)

他们都找到了。 F=ma.

问题是150的神秘因素。它到底是从哪里来的?

好的,所以这都是关于 Apple 的错误文档。 这是150的真相。

this seems to be little bit stupid, but applyForce is measured in ((points * kilo) / sec ^ 2), but the gravity acceleration is in Newtons ((kilo * meter)/ sec ^ 2) (despite the fact it's described as meters per second in documentation. Meters per second! Acceleration!). Multiply it by mass and get the force.

拜托,Apple...它已经推出 4 年了。