【问题标题】:How to Spin a Sprite Node by a particular force like fidget spinner如何通过诸如指尖陀螺之类的特定力来旋转 Sprite 节点
【发布时间】:2018-01-01 08:49:57
【问题描述】:

我想通过一个特定的力量来旋转一个精灵节点,比如一个指尖陀螺。当用户在屏幕上快速移动手指时,微调器旋转得更快,当用户在屏幕上缓慢移动手指时,微调器 (SKSpriteNode) 旋转得更慢。
我有一个分配给节点的微调器图像。我还想检查它在哪个位置停止,因为我有一个围绕该节点的项目列表,并且根据它停止的位置,我想选择该项目。我知道我必须施加一个角脉冲,但我不知道如何计算它的值。

触摸速度越快,施加的力就越大(就像真正的旋转器一样)

这就是我正在做的:

fidgetSpinner.physicsBody?.applyAngularImpulse(5)

【问题讨论】:

  • 您的问题是什么?微调器是不旋转还是旋转但用力错误?
  • 我的问题是如何在触摸移动或 UITouch 的 touchesMove 代表中以准确的力旋转
  • 所以您希望触摸的速度越快,施加的力就越大? (就像一个真正的微调器)?如果是这样,您能否将此信息编辑到您的问题中。
  • 是的,史蒂夫,我想根据用户的移动来移动微调器,但只能绕其轴移动
  • 然后您需要在适合滑动的点、方向和值对物理体施加圆形脉冲。您需要阅读 SKPhysicsBody 类参考 (developer.apple.com/documentation/spritekit/skphysicsbody/…) 中的 'applyForce(_:at:)' 方法以及 Sprite-Kit (stackoverflow.com/q/39783608/1430420) 中的滑动手势识别器以及如何提取速度,滑动的位置和方向。

标签: ios objective-c swift sprite-kit 2d-games


【解决方案1】:

角脉冲是正确的方法,施加力会使整个身体以线性方式移动。几乎所有的物理实体都以牛顿/(秒 * 秒)为单位完成(除了 applyForce,由于错误,它使用像素)。这是您场景中的 150 个点。

您只需要一个精美的扩展程序即可为您进行转换

extension CGFloat
{
   public var toNewtons : CGFloat { return self / 150.0 }
}

然后要使用它,你只需要这样做

let distanceInNewtons = distanceOfTouch.toNewtons
node.physicsBody?.applyAngularImpulse(distanceInNewtons)

【讨论】:

  • 如果 distanceOfTouch 的单位是像素,除以 150 将为您提供以米为单位的距离。角脉冲的单位是牛顿秒(千克米每秒)。
  • 我不知道你在这里争论或评论什么,150 点 = 1 牛顿,你要称它为每秒 150 点吗?
  • 嗯,两者都可以,1牛顿是1秒推1公斤1米的力。我们1秒推1公斤150分
  • 我不知道你为什么要和我争论,只要做 applyForce(150) 和 applyImpulse(1) 你就会看到精灵的速度是一样的
  • 你知道力量和冲动的区别吗?
猜你喜欢
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多