【问题标题】:SpriteKit collision angle of line and circle is oddSpriteKit线和圆的碰撞角度是奇数
【发布时间】:2015-06-22 14:00:38
【问题描述】:

假设一个圆圈被一个菱形包围,并且圆圈向右。当圆圈在菱形内画出正方形时,我预计会出现一系列连续的 90 度角。

然而,我看到的是,在一两次碰撞后,圆圈最终会被推向钻石的中心。怎么回事?

线路设置为动态 -> NO.

【问题讨论】:

    标签: ios sprite-kit skphysicsbody


    【解决方案1】:

    假设它是完全弹性碰撞,球会与其接近角对称地反射。这意味着,要获得您正在寻找的行为,球需要从一条线的中点准确接近另一条线的中点,而不会损失任何能量。

    Sprite Kit 的物理引擎将无法处理这些精确值。 Sprite Kit 中弹性碰撞后的能量不能保证是守恒的。物理引擎的浮点计算会有一些小的误差。此外,碰撞本身可能无法解决为完美的点对点反射,这意味着球可能会“滑动”,从而导致反射角度发生变化。

    但是,我仍然希望看到更多的碰撞,而不是一两次。确保两个对象的restitution 设置为1.0,并确保球的linear damping 设置为0。affectedByGravity 显然应该为假。 Friction 应设置为 0。您可以尝试将 usesPreciseCollisionDetection 设置为 true。

    如果您需要您在图片中描述的行为无限期地持续,您将需要手动设置位置和速度。

    【讨论】:

    • 如果在碰撞过程中有线性阻尼会发生什么?我实际上是在寻找球在绘制正方形时减慢速度,但我不知道这也会影响碰撞。我会测试你提到的其他数字,但是,重力是错误的。
    • @StefanKendall 线性阻尼就像空气阻力。这只是另一种外力。它会逐渐减慢物体的速度,直到它停下来。
    • @StefanKendall 请记住,当球减速时,它很可能会停止形成正方形。即使速度的微小变化也会导致不同的反射角。如果您仍然有问题,您可能需要发布一些代码。 SKActions 也是一种选择吗?您可以轻松地将球动画到每个位置并逐渐减慢它的速度,但这不是实时物理。
    • 这是摩擦。将摩擦力设置为 0,对于我描述的示例,您将获得更合理的碰撞角度。
    • @StefanKendall 很有趣,所以确实发生的情况是每次碰撞时球都会轻微“滑动”。消除系统中的摩擦可以更好地保存弹性能量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多