gpt4 book ai didi

sprite-kit - 当 shouldEnableLimits 为 true 且 lowerAngleLimit 和 upperAngleLimit 设置时,SKPhysicsJointPin 的行为不正确

转载 作者:行者123 更新时间:2023-12-03 09:46:25 25 4
gpt4 key购买 nike

我目前有一个布娃娃图,它由一个父节点(没有附加物理体)和许多子节点组成,每个子节点都由一个圆体组成。这些圆圈使用 SKPhysicsJointPin 相互连接在每个圆圈之间,如下所示:

Ragdoll figure

每个SKPhysicsJointPinshouldEnableLimits = true ,我目前对 lowerAngleLimit 使用 -0.05 和 0.05 的值和 upperAngleLimit分别。

这非常有效并且可以防止形状变形太多,除非当图形整体上下颠倒时,在这种情况下,所有关节突然尝试收缩,如下所示:

Broken ragdoll figure

  • 另见:Video

  • 当人物完全颠倒时,关节会迅速收缩。当他再次旋转回来时,所有的关节都恢复了正常。为什么会发生这种情况?如何保持关节的正确角度?

    编辑 1:

    我只是尝试用 Objective-C 重写项目,以防它是由于一些奇怪的 Swift 错误;事实证明这个问题仍然在 Objective-C 中表现出来,所以我删除了 Swift 标签。

    我目前最好的猜测是,当它们所连接的物体在任一方向上旋转超过 180° 时,SpriteKit 会错误地计算出关节相对于世界的角度,因此错误的角度被传递给了底层 Box2D 关节。

    我不确定我是否应该不断更新上下角度限制以匹配他们 body 的世界角度,但是当 body 非常接近颠倒时,我似乎不必这样做关节停止正常工作。无论如何,我会继续尝试……

    编辑 2:

    我现在相当确定问题的发生是因为 SpriteKit 是(我想有充分的理由)修改了 zRotation值以将其保持在 -180° 和 180° 之间。例如,如果节点顺时针旋转并达到 -180°,SpriteKit 会自动将其值换回 +180°。我相当有信心这种环绕会导致关节行为不正常,我只需要弄清楚如何抵消它......

    编辑 3:

    我已经上传了演示此问题的示例应用程序(包括视频),这是 Apple 最初要求的: Xcode Project/ Video

    最佳答案

    “我目前分别为lowerAngleLimit 和upperAngleLimit 使用-0.05 和0.05 的值”

    根据文档...

    upperAngleLimit - The largest angle allowed for the pin joint, in radians.

    ...限制以弧度为单位。

    0.05 radians = 2.86478898 degrees

    所以,你只允许物体总共移动大约 5 度。这是一个极小的范围。根据我的经验,当 body 被迫超出范围时,SpriteKit 会开始这种奇怪的捕捉行为。

    我不认为这种行为特定于颠倒的 body 。我最好的猜测是物理引擎没有帧速率来在一帧中应用重力并在下一帧移动超出范围之前捕获 body 。

    你应该增加范围。我更喜欢用度数来指定它。例如...
    func degreesToRadians(degrees: CGFloat) -> CGFloat {
    return CGFloat(M_PI) * degrees / 180.0
    }

    pinJoint.shouldEnableLimits = true
    pinJoint.lowerAngleLimit = degreesToRadians(-30.0)
    pinJoint.upperAngleLimit = degreesToRadians(180.0)

    您将不得不修改角度、质量和重力,直到找到事物真实移动的最佳位置。

    如果你真的想要这么小的运动范围,我会考虑完全禁用它。
    circle.physicsBody?.allowsRotation = false

    关于sprite-kit - 当 shouldEnableLimits 为 true 且 lowerAngleLimit 和 upperAngleLimit 设置时,SKPhysicsJointPin 的行为不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25555113/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com