【问题标题】:Sprite kit impulse at point精灵套件脉冲点
【发布时间】:2015-01-07 18:13:15
【问题描述】:

我正在尝试使用宇宙飞船上的两个点来创建“类似坦克的运动”,当两个点都受到physicsBody 的冲动(使用applyImpulse(CGVector, atPoint: CGPoint) 方法)并转向时,宇宙飞船将向前移动当只有一个点得到冲动时左/右。

我可以使用不带atPoint 参数的applyImpulse(CGVector) 方法将宇宙飞船向前移动,并且它可以工作,但是我在使用atPoint 参数时遇到了问题。

当尝试使用 atPoint 参数时,即使我对喷气发动机 1 和喷气发动机 2 都施加了脉冲,宇宙飞船也会随机移动,但我不确定我是否在正确的点施加力(在图像上标记的喷气发动机点),文档对此非常模糊,我不知道如何正确定位脉冲。

有谁知道如何获得正确的位置来应用脉冲?应该和图片上的一样。我正在使用 Swift,但我可以阅读 Objective C,所以这并不重要。

编辑: 我尝试了以下几点:

CGPoint(x: 0, y: 0) and CGPoint(x: 1, y: 0)    
CGPoint(x: 0, y: 0) and CGPoint(x: spaceship.size.width, y: 0)    

【问题讨论】:

  • @AndrewMonshizadeh 我刚刚用我尝试使用的两组点编辑了帖子
  • @CorPruijs 正如我所说,您可能应该使用 y 轴。或者至少,对于您显示的图像,这些点在 y 轴上偏移,而不是在 x 轴上。
  • @AndrewMonshizadeh 我已经修好了,我应该注意到飞船当前转动了 π/2(弧度)。

标签: swift sprite-kit game-physics


【解决方案1】:

查看文档,您应用脉冲的点必须在场景坐标中。这意味着,您需要确定精灵坐标中的点(可能是CGPoint(x: 0, y: 1)CGPoint(x: 0, y: -1) 之类的坐标,但您可能需要使用它们),然后使用convertPoint(point, fromNode: ship) 将它们转换为场景坐标。

【讨论】:

  • SpriteKit Programming Guide 有大量关于用于各种节点的坐标系的信息。不过,您可能感兴趣的是 SKSpriteNode 找到的 here。您很可能只想使用y 值。
【解决方案2】:

实现这一点的一种方法(可能)会给你一个更“现实”的阻力和推力结果,就是将两个发动机主体悬挂在你的战斗机上,并赋予它们两个阻力属性,并在需要时从它们施加推力,根据需要。

通过这种方式,您将获得一台发动机开启而另一台发动机关闭等常见的旋转类型。

【讨论】: