【问题标题】:SKPhysicsBody's .dynamic PropertySKPhysicsBody 的 .dynamic 属性
【发布时间】:2016-07-16 01:16:16
【问题描述】:

我有一个矩形节点(带有矩形物理主体),我正在执行重复的 SKAction 以四处移动。我已经读过对具有物理实体的对象执行操作可能会导致问题,所以如果我将节点的物理实体设置为.dynamic = false,我可以用SKAction 移动它而不会造成问题吗?是否还有其他注意事项,例如设置 .isAffectedByGravity = false.dynamic = false 属性是否会覆盖所有其他物理属性?

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    正如official documents所解释的:

    动态属性控制是否影响基于体积的主体 通过重力、摩擦、与其他物体的碰撞以及力或 直接应用于对象的冲动

    还有here:

    一个布尔值,指示物理体是否被移动 物理模拟。

    默认值为 true。如果该值为 false,则物理体将忽略施加在其上的所有力和冲量。这个属性在基于边的物体上被忽略;它们自动是静态的。

    显然,如果你准备一个 SKAction 将一个物体移动到 x 所涉及的物体,因为冲动将他推到另一侧或同一侧,你将在速度、方向和一般情况下产生不良结果在由SKAction + 物理世界中存在的物理力施加的附加力引起的行为中。所以答案是:是的,你可能会导致一些问题。在涉及物理定律的上下文中,最好使用applyImpulsevelocity或其他方法来控制动态对象。

    关于你的最后一个问题:

    是否还有其他注意事项,例如设置 .isAffectedByGravity = false 或 .dynamic = false 属性是否会覆盖所有其他物理属性?

    我认为说“覆盖”这个词是错误的:当你定义 affectedByGravity 你设置了一个影响身体的力,同样的事情可能是关于 dynamic 而其他参数,如质量、密度、面积、摩擦......是属性(自身带来的特性)

    【讨论】:

      【解决方案2】:

      如果您的 Sprite 是 .dynamic,那么所有物理属性都会影响它。话虽如此,您仍然可以使用 SKActions 来移动它。如果 .dynamic = false,则所有物理属性都会被覆盖,并且不会作用于您的 Sprite。

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 1970-01-01
        • 2011-05-01
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        相关资源
        最近更新 更多