【问题标题】:How to apply Orbital Gravity in cocos2d chipmunk如何在 cocos2d 花栗鼠中应用轨道重力
【发布时间】:2014-07-16 17:11:19
【问题描述】:

我正在用 Cocos2d - Chipmunk - Spritebuilder 构建一个 IOS 游戏。我需要让一个角色绕着一个点旋转,而我在用真实物理实现轨道时遇到了一些困难。 到目前为止,我已经尝试了两种方法,一种是创建一个从玩家到行星的距离关节,然后对玩家施加 90 度的力,在距离关节的末端和绘制的假想线之间创建一个角度与它成 90 度角。他疯狂地四处走动,这种方法对我不起作用。

然后我尝试在距离行星半径的圆周上计算 180 个点(这是检测和实施其对玩家的影响的界限) - 然后在计划的更新方法中 [character.physicsbody applyForce:nextCircumferencePoint];这是行不通的,因为他没有完全遵循这条路,而且离这条路很远。我在想我还需要对这颗行星施加一个引力,这会使他绕着它转。虽然我不知道如何计算那个力,应用它,或者它是否会有所帮助。

第三种永远不会起作用但用于测试的方法是将他的位置设置为下一个圆周点。他确实在轨道上运行,但任何碰撞都不起作用(例如,如果一块太空垃圾挡住了他的路。)他只会被定位在任何其他物体的正上方。如果您不需要碰撞,这个世界很棒,正在编写自己的物理引擎。这不是一种优雅的做事方式,所以会避免它。

请更正我已经做过的任何事情并告诉我它是如何工作的,或者阐明其他选项以及如何实施它们。

【问题讨论】:

    标签: cocos2d-iphone gravity orbital-mechanics


    【解决方案1】:

    查看我的回答here。它适用于 box2d,但您可以使用 Chipmunk 来完成。如果 bodyA 位置发生变化,则轨道将相同。您只需要根据需要更改身体运动的速度,只需增加平滑度并减慢更新方法即可。

    【讨论】:

    • 这很好用,但唯一的问题是如果角色的位置设置在另一个对象的边界框内,它不会反弹,而只会被放置在另一个对象内。跨度>
    • 发生这种情况是因为身体没有移动,只是改变了它的位置。 body->SetLinearVelocity(newposition.x, newposition.y) 而不是 body->SetTransform 呢?现在我无法测试它是否有效。测试它并告诉我结果。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多