【问题标题】:Understanding gravity and vectors in SpriteKit了解 SpriteKit 中的重力和矢量
【发布时间】:2016-08-19 00:38:25
【问题描述】:

我正在SpriteKit 中构建一个相对简单的游戏,您可以在其中使用ball.physicsBody.applyImpulse(someVector) 之类的东西根据用户的触摸位置反弹球。
我一直在尝试通过使用physicsWorld.gravity 向量的值和施加在球上的脉冲向量来了解重力和向量的工作原理,我想我需要澄清一下;

如果我使用此代码:

self.physicsWorld.gravity = CGVectorMake(0, -10)
ball.physicsBody.applyImpulse(CGVectorMake(0, 10))

根据这个代码和常识,球不应该根本不动,因为拉力和推力是相等的,或者至少在开始落入之前上升10的确切距离案例?
实际上发生的情况是,球确实弹了起来,并且向上移动了超过 10个像素的距离。
为什么会这样,我需要使用什么确切的值来抵消矢量以使球保持完全静止?
我很乐意提供任何解释,在此先感谢。

【问题讨论】:

  • 问题是完全混淆两个不相关的事情。 "applyImpulse" 只是对游戏的一帧应用脉冲。 (所以,大约 1/100 秒!)物理 世界 设置“.gravity”是完全不相关的,它创建了一个始终运行的场。
  • “实际上发生的情况是,球确实会弹起来,并且会飞很长的距离” 很简单,这取决于球的质量。您只是在 1/100 秒内踢了它一脚(短暂的硬踢)。高度仅取决于质量。

标签: ios swift vector sprite-kit physics


【解决方案1】:

这 10 不是像素,对于重力来说,它是米每秒,所以你需要把 10 除以 FPS 得到 1 帧,(1/6 米)然后你需要弄清楚要多少米像素比是,这将为您提供像素数。对于冲量,它是牛顿秒,即每秒推 1 公斤 1 米。所以你需要计算出物体的质量,才能计算出它每秒真正移动了多少米。所以如果你的物体质量是 1 KG,那么它会平衡到 0。我不会做实际的数学来告诉你如何计算这个东西,你必须自己研究。

总结:

重力单位是米每秒 脉冲单位是纽敦秒 AKA 千克米每秒

您需要匹配单位才能使事物平衡到 0

如果您想了解更多信息,请参阅 https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/#//apple_ref/occ/instm/SKPhysicsBody/applyImpulse: 和 https://developer.apple.com/library/mac/documentation/SpriteKit/Reference/SKPhysicsWorld_Ref/index.html#//apple_ref/occ/instp/SKPhysicsWorld/gravity

【讨论】:

  • 重力的单位是米每秒平方而不是米每秒。
  • @0x141E 然后告诉苹果更新他们的文档,顺便说一句,1 秒平方仍然是 1 秒
  • 嗯,进一步了解重力是如何工作的(这里不是物理学家)结果是 9.8 m/s^2 是 9.8 NKG 的力,或者在你的情况下是 10,所以施加脉冲应该是平衡的到 0。所以我的回答至少有助于解释为什么它不是 10 像素,而不是为什么你的对象逆着重力移动
  • @knightofdragon 我不确定您的评论“1 秒平方仍然 1 秒”与本次讨论有何关联。
  • 重力矢量是米每秒,米每秒平方也是一样,因为 1 秒 == 1 平方秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多