SpriteKit - 制作精灵无视重力(如气球)

Ada*_*ter 4 ios sprite-kit

有谁知道我怎么能让我的SKSpriteNode反抗引力?我想过反转默认的引力但是意识到我也需要掉下来的东西!

看起来应该很容易,但通过文档阅读我看不出我会怎么做!

谢谢

ric*_*ter 11

更新:在iOS 8/OS X Yosemite(10.10)中,物理领域为这些问题提供了一个优雅的解决方案.这里可以快速使用它们为场景添加浮力(针对特定的节点集).

  1. SKFieldNode使用linearGravityFieldWithVector构造函数创建一个,提供与重力相反的向量,并将字段节点添加到场景中.
  2. fieldBitMask气球设置为独特的气球.
  3. categoryBitMask字段设置为与气球重叠的东西fieldBitMask,但不与fieldBitMask任何其他实体重叠.

现在,气球会上升或保持稳定,但其他物体会下降.调整场地strength将让你调整气球的浮力是否完美地平衡重力(使它们漂浮在原位,但在触摸时受到干扰),或稍微多于或少于重力(使它们缓慢上升或下降).

默认情况下,一个字段是无限的,覆盖整个场景,但您可以使用字段的region属性更改它以将其限制为场景的一部分.(如果你想模拟水中的浮力,这很有用 - 一旦一个物体越过水面的水面顶部,就会重新进入水中.)

此外,如果您想根据@TheisEgeberg的答案获得可变浮力,您可以控制其与falloff物业的距离变化.

在iOS 7/OS X Mavericks(10.9)中,或者如果您想要更精确地控制在何时何地应用哪种力,您可以使用下面原始答案中的方法.


如果你想让一个物体像气球一样漂浮 - 也就是说,要浮力,受到重力的影响而且还要抵消它 - 你需要在每一帧(即你的update:方法)上施加一个力.

注意缩放:重力是一个恒定的加速度,但如果你施加一个力来抵抗重力,力就会与质量成正比.要制作一个能够完美平衡重力的矢量applyForce:,您需要:

  1. 将重力矢量缩放{-1,-1,-1}到相反方向
  2. 通过mass你施加力的身体(F = ma重力或反重力a)来缩放.
  3. 缩放150- 有一个错误,其中SKPhysicsWorld.gravity属性与单位不同applyForce:.(如果关闭SKPhysicsWorld重力并使用SKFieldNode重力,则不需要这样做.)

与关闭affectedByGravity和应用动作以使气球上升不同,这种方法适用于物理模拟的其余部分.当平衡力与重力完全相等时,气球将浮动到位 - 在与其他物体碰撞后,它将恢复平衡.如果平衡力大于重力,则气球将上升,但其上升将受到其他物体的阻碍.