【问题标题】:Cocos2d Chipmunk physic objects sleeping and not waking upCocos2d Chipmunk 物理对象睡不醒
【发布时间】:2014-05-12 22:09:08
【问题描述】:

我在我的游戏中使用 Cocos2d v3 和 Chipmunk 来实现物理。我的游戏中有一个球掉到一个带有活板门的平台上。平台和门是静态物体,因此它们不会因球的速度或重力而掉落。玩家可以控制打开活板门,所以如果球被设置在平台或门上,它最终会睡着。一旦球被设置为休眠状态,当活板门打开时,它不会识别物体不再位于球下方,因此球不会移动。

现在我每 0.2 秒调用一次函数来检查球。如果它睡着了,它会将它的速度设置为 (0, 0) 以唤醒球。唯一的问题是,这种方式将游戏的帧率从 60 降低到 40-50。 (我可以在关卡中同时拥有多达 30 个不同的球,这会减慢它的速度)

有没有一种简单的方法可以防止球入睡或在活板门打开时将其唤醒?或者有没有办法让我的活板门保持动态而不是静态,但当球与它碰撞时它们不会移动。

【问题讨论】:

    标签: cocos2d-iphone chipmunk


    【解决方案1】:

    如果你需要唤醒身体,你可以尝试使用ChipmunkBodyactivate方法,该方法是CCPhysicsBody内部使用的。

    我没试过这个,只是通过查看cocos2d的代码找到了这个选项。这是一些伪代码,可能可以解决问题:

    #import "CCPhysics+ObjectiveChipmunk.h"
    
    //Let's pretend this method is called when you open your trap door
    -(void)openTrap
    {
    
       // Get the body of your ball somehow
       CCPhysicsBody *ballBody = ... 
    
       // Get the body property of CCPhysicsBody, 
       // (which is only available if you import the header at the top)
       // this will return a ChipmunkBody body, which has an 
       // activate function to wake up your ball
       [ballBody.body activate];
    
    }
    

    【讨论】:

    • 使用激活似乎有效。我最终把它放到了我已经在做的事情中,而不是设置速度。现在似乎效率更高了。谢谢
    • 不客气。也许有一种更有效的方法可以做到这一点,但至少它对你有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多