如何让精灵有引力?

时间:2014-05-22 10:31:12

标签: sprite-kit gravity

xcode 5 iOS7精灵套件。

我的愿望是制作一个具有自身重力的精灵。 就像一个星球。如果另一个精灵在它的某个范围内,它将慢慢拉近另一个精灵。

我有两个精灵。一个移动,一个固定。当移动的精灵进入静止精灵的给定距离时,静止的精灵重力应该慢慢将另一个精灵拉向它。这样,移动的精灵会以柔和的曲线改变其路径。

我的想法是计算从静止物体到任何其他物体的距离,如果足够接近开始拉动,如果移动物体超出范围老化,则停止拉动。 可能需要研究一些矢量计算。 这是我的直接想法。

这可能吗?怎么样?它已经存在吗?

3 个答案:

答案 0 :(得分:1)

我的一位朋友为他的物理学论文做了这件事。多体重力模拟。所以,你可以,但你需要愿意学习一些数学。显然有一个聪明的优化,使它运行得体面nlog(n)而不是n ^ 2)。你可能想在堆栈溢出的物理版本上问这个以获得一个好的答案。我在家里有代码...稍后会发布,但你会想要一个解释 - 我在xna应用程序中使用它。它的坏蛋一旦你开始工作 - 虽然如果你想要自然轨道的物体,那么你会想要使用参数方程对它们进行编码以获得简单而酷炫的轨道。仅仅因为它难以解决并且即使使用双倍也会导致一些错误(良好的实现也可以解决错误并进行调整 - 稍后将再次发布)。但真正的问题是解决稳定的轨道问题。然后,您可以将算法用于自由移动的物体,例如播放器对象/ npcs。虽然在变化的领域中解决npc的精确运动是很困难的。

你想看看这个问题:Jon Purdys回答是你想要的那个

multi body physics - gravity

和这个(从上面链接)......

https://gamedev.stackexchange.com/a/19404

答案 1 :(得分:0)

据我所知,除了一些为不同平台导出的游戏引擎/平台(cocos2d,构造2等)之外,在任何平台上都没有一种简单的方法。

你需要的是一个物理引擎,无论你是写一个(这是一个复杂但有趣的事情)或使用可用的。

幸运的是,我在iOS上找到了描述着名2D物理引擎“Box2D”用法的链接。

这个解释了如何在OpenGL应用程序中包含Box2D(但你可以将它应用于其他环境(sprite kit)我认为,尽管我不是iOS人员);

http://www.iforce2d.net/b2dtut/setup-ios

无论如何,你现在知道要寻找什么......

答案 2 :(得分:0)

  1. 对于iOS 8.0+:您有SKFieldNode:radialGravityField()

  2. 对于iOS 8.0-:一种解决方案可能是:3到9

  3. 使用物理
  4. 添加你的精灵(星球)
  5. 添加一个不可见的SKNode(重力区),它有自己的物理特性,作为精灵的一个孩子,但半径远远超过你的精灵的一个
  6. 您在此处有一些关于隐形节点的解释:https://developer.apple.com/documentation/spritekit/skphysicsworld
  7. 两者,你的精灵和不可见的节点都在零重力世界中心
  8. 我们寻找接触而不是碰撞(正确设置你的位掩码)
  9. 当任何物体与不可见节点(重力区)接触时,首先从中移除任何移动动作或冲动,然后我们向该物体添加一个SKAction以将其移向精灵(行星)的中心< / LI>
  10. 在此对象与您的精灵(星球)之间的第二次接触时,您使用velocity = 0从对象中再次删除所有操作