【问题标题】:Cocos2d + Chipmunk Physics - cpBodyApplyImpulse()Cocos2d + 花栗鼠物理 - cpBodyApplyImpulse()
【发布时间】:2012-02-19 19:14:03
【问题描述】:

所以我正在开发一款游戏,本质上,它是一个自上而下的球视图。当我点击球时,我基本上想向给定的方向发射它。这将是瞬间的力量(想想用球杆击打台球)。我正在尝试使用 applyImpulse 来执行此操作。

到目前为止,我得到了:

 cpBodyApplyImpulse(sprite.body, 
                    cpBodyLocal2World(sprite.body, cpv(0.0, 1.0)), 
                    cpBodyLocal2World(sprite.body, cpv(0.0, 0.0))
 );

据我了解,此函数采用的 2 个向量是“世界坐标”,所以我正在做的是在身体相对坐标中可视化所有内容,然后将它们转换为世界坐标。

根据我上面的代码,我认为球会直接向上发射而不会旋转,因为它是在重心处应用的正 y 方向上的向量。然而,球最终向右移动,无法控制地旋转。任何想法为什么会发生这种情况,以及我如何实现我想要做的事情?

【问题讨论】:

    标签: objective-c cocos2d-iphone chipmunk


    【解决方案1】:

    cpBodyApplyImpulse 输入身体坐标,而不是世界。

    试试这个:

    cpBodyApplyImpulse(sprite.body, 
                        cpv(0.0, 1.0), 
                        cpv(0.0, 0.0));
    

    【讨论】:

    • 谢谢。那行得通,真不敢相信我错过了。还有一个更快速的问题——也许我考虑这个问题太久了,但是如何将向量定义为单点?向量的原点在哪里?
    • 在这种情况下,两个向量的原点都是您身体的重心。向量 (0,0) 只是意味着不偏移任何东西。 (您之前的旋转是因为在世界坐标中这个向量不是 0,0,所以您将力施加到对象的一侧)
    • @deanWombourne body-coordinates 对于最后一个值实际上并不正确。该值希望位于世界坐标中,因此正确答案是cpBodyApplyImpulse(sprite.body, cpv(0.0, 1.0), cpBodyLocal2World(sprite.body, cpv(0.0, 0.0)) ); 在这种情况下实际上并不重要,因为 cpv(0,0) 只会映射到相同的值
    • 实际上第二个参数也在世界坐标中,但你不需要从本地映射它;只需要找到合适的值。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多