【问题标题】:Can I move dynamic physics bodies using SKAction when only contact detection is needed?当只需要接触检测时,我可以使用 SKAction 移动动态物理体吗?
【发布时间】:2015-02-06 00:39:53
【问题描述】:

我正在查看定义如下的教程:

  • 平面是具有动态物理主体的精灵
  • 平面移动是通过跟随路径的动作完成的
  • 子弹和飞机之间有接触检测
  • bullet 是 sprite,它的物理体设置为静态(我认为这有点不寻常)

这里是tutorial 的链接了解更多信息。

问题:

  1. 当我们使用动作来移动physicsBodies时,我们设置body的动态属性有什么不同吗?因为子弹是静止的,但仍然没有运动的问题。

  2. 当我们遇到这样的情况时,我们不需要碰撞检测,只需要接触检测,并且我们不能通过施加力或脉冲来移动精灵(敌人),有什么好的方法?这种方法正确吗?

我认为这是很好的方法,但我想充分了解当我们使用这种方法时实际发生了什么,是否存在任何缺点或可能的问题。

SO 上有 posts 建议我们不应该使用动作来移动动态物理物体。我知道我们不能在每种情况下都使用这种方法。例如,这不适用于上面有其他物体的移动平台,因为平台上的物体和被动作移动的平台之间没有正确的物理模拟。但是在本教程中的情况下,我们只需要对只能通过动作(沿路径移动)移动的对象进行接触检测,我想这不是问题吗?

【问题讨论】:

    标签: sprite-kit skphysicsbody skaction


    【解决方案1】:
    1. 静态意味着身体不受物理影响。这并不意味着它不能手动重新定位或移动。因此,如果某些东西设置为静态,它会参与物理模拟,但不受它的影响。想象一架飞机撞上一座山。这架飞机是动态的,即使它参与了物理,这座山也只会坐在那里。但是您仍然可以使用位置或动作手动移动这座山。

    2. 不完全理解您的问题,但我会试一试。

    您可以手动移动physicsBody(使用位置属性或动作),但您需要问自己为什么要这样做。您通常不想这样做,因为它们绕过了物理模拟。如果你强迫它四处移动,那么首先使用物理体有什么意义......对吗?

    但是,如果您的物理体就像一个完全静态的通电装置,而您只是希望它通过一个动作绕着一个圆圈移动,那就没问题了。您可能只想对子弹、通电等使用接触检测,而无需使用物理实际移动它。没有错。

    【讨论】:

    • 嗨 hamobi,感谢您的快速回复。是的,我正在考虑用行动移动敌舰(以及通电),因为我想沿着不同的预定义路径(CGPath)移动它们。使用力很难做到这一点......在这种特殊情况下,物理物体(用于子弹、飞机或通电)用于接触检测,因为我相信这比使用 CGRectIntersectsRect 等方法实现我自己的接触检测更容易。感谢您的解释和帮助。我只需要知道这种方法是否“合法”:)
    • 是的,如果您只需要接触检测而不需要碰撞响应(即防止物体相互穿透、因碰撞而改变方向等),那么通过动作移动物理物体是可以的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多