【问题标题】:Box2D Joint.GetReactionForce equivalent in Sprite KitSprite Kit 中的 Box2D Joint.GetReactionForce 等效项
【发布时间】:2014-03-13 19:52:35
【问题描述】:

在使用纯的、展开的 Box2D 和 Cocos2D 时,我曾经能够通过一个名为 GetReactionForce 的漂亮函数来获得关节上的反作用力。我最近开始尝试 Sprite Kit 物理,但我似乎没有找到类似的东西。据我所知,没有现成的。有没有办法可以在 Sprite Kit 中以某种方式实现这一点?物理引擎仍然是 Box2D,但并非所有功能都可用。我认为可以使用形成关节的物体的质量、密度、速度等属性来完成。但我不知道怎么做。

【问题讨论】:

    标签: box2d sprite-kit revolute-joints


    【解决方案1】:

    它不是现成的,我想不出使用 Sprite Kit 的内置物理来模拟或解决它的方法。

    也就是说,忽略 Sprite Kit 的物理特性并在您的应用程序中嵌入 Box2D(或 Chipmunk)是相当容易的。您可以在场景的 didSimulatePhysics 消息中步入世界(即使physicsWorld 属性为零也会被调用)。您可以在主体的 userData 中存储对节点的引用,并在逐步枚举主体并更新其节点(从主体的 userData 获得)的位置和 zRotation 属性。

    这些是必不可少的步骤。仅仅因为 Sprite Kit 内置了物理并不意味着您不能使用其他物理引擎。

    【讨论】:

    • 是的,正确。你知道,@Stefen,我可以说 ObjectiveC 包装的 Box2D 是我考虑可能从 Cocos2D 迁移到 Sprite kIt 的唯一原因。 (我仍然觉得 C++ 有点难以适应)但是这个问题和其他大量问题证明我最好坚持使用 Cocos2D,至少在 iOS 9 之前,到那时我会对 C++ 感到满意 :)
    • 由于我只是深入研究类,SKPhysicsContact 确实有一个名为 _collisionImpulse 的 ivar,您可以通过 [self valueForKey:@"collisionImpulse"] 访问它——但这构成了 Apple 使用的私有 API不允许在其开发者协议中。
    • 嗯。你在 Kobold Kit 中填补了这些空白吗?我看到你对 Sprite Kit 缺少的东西做了很多改进。
    • 不,除非出于调试目的,否则我会避免使用私有 API。我一直在考虑为 SK 添加自定义物理解决方案,但没有时间或需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多