2

是否可以加速 SKSpriteNode?

我知道可以轻松设置速度,node.physicsBody.velocity但设置它的加速度有多难?

4

3 回答 3

6

从牛顿第二定律倒推运动:F = ma 您可以通过使用applyForce力是加速度乘以质量来实现所需的加速度。

[node.physicsBody applyForce:CGVectorMake(node.mass*acceleration.dx,
                                          node.mass*acceleration.dy)];
于 2014-02-03T09:37:34.663 回答
1

applyImpulse立即赋予一定量的能量(以牛顿.秒为单位)。您的对象不会立即加速到所需的速度。这看起来不太自然,因为它意味着近乎无限的能量(能量除以时间),因此只适合爆炸(例如射击子弹)。

applyForce在模拟运行的时间间隔内(即:1/60 秒)施加力(以牛顿为单位)。这使您可以正确地加速对象并模拟在不同方向上同时施加的许多不同的力(重力、风、火箭助推器等)。

同样值得注意的是applyForce:atPoint:这允许您指定在对象的哪个点施加力。例如,如果您使用绳子模拟气球,绳子会将其重量施加到气球的底部,而气球底部的升力将施加到气球的中心。在重心以外的其他地方施加力将导致物体旋转。

最后,您有相应的applyAngularImpulse:applyTorque:允许您影响对象的旋转速度。例如,如果您想在各种反弹的情况下保持物体直立,这很有用:您可以应用与角度成比例的扭矩(或者如果您想避免振荡,则将其平方)。

所有这些都在这里得到了很好的记录:SKPhysicsBody

但是,如果您需要有关物理学本身的更多信息,请查看 Wikipedia: Newtonian Physics和相关页面(例如角动量)。

于 2014-03-17T17:47:43.357 回答
0

如果你想让它加速,那么你应该改变物体的重力方向

self.physicsWorld.gravity = CGVectorMake(dx,dy)

但这会让一切加速,如果可以的话

于 2014-02-04T22:39:50.973 回答