Cocos2d iphone Cocos2d花栗鼠物理对象睡眠而非醒来

Cocos2d iphone Cocos2d花栗鼠物理对象睡眠而非醒来,cocos2d-iphone,chipmunk,Cocos2d Iphone,Chipmunk,我在游戏中使用coco2dv3和花栗鼠进行物理测试。我的游戏有一个球掉到一个平台上,里面有一个活板门。平台和门是静态对象,因此它们不会从球体速度或重力中坠落。球员可以控制打开陷阱门,因此如果球停在平台或门上,它最终会睡着。一旦球被设置为睡眠状态,当活板门打开时,它将无法识别球下不再有物体,因此球不会移动 现在我每0.2秒调用一个函数来检查球。如果它处于睡眠状态,它会将其速度设置为(0,0),从而将球唤醒。唯一的问题是,这种方式将游戏的帧速率从60降低到40-50。(我一次最多可以在关卡中放置30

我在游戏中使用coco2dv3和花栗鼠进行物理测试。我的游戏有一个球掉到一个平台上,里面有一个活板门。平台和门是静态对象,因此它们不会从球体速度或重力中坠落。球员可以控制打开陷阱门,因此如果球停在平台或门上,它最终会睡着。一旦球被设置为睡眠状态,当活板门打开时,它将无法识别球下不再有物体,因此球不会移动

现在我每0.2秒调用一个函数来检查球。如果它处于睡眠状态,它会将其速度设置为(0,0),从而将球唤醒。唯一的问题是,这种方式将游戏的帧速率从60降低到40-50。(我一次最多可以在关卡中放置30个不同的球,这会使速度减慢很多)


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

如果你需要唤醒身体,你可以尝试使用
花栗鼠体
激活
方法,该方法由
CCPhysisbody
内部使用

我没有尝试过这个,只是通过查看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];

}

使用activate似乎有效。我最终将其应用到我已经在做的事情中,而不是设置速度。现在似乎效率高了一点。谢谢,不客气。也许有一种更有效的方法可以做到这一点,但至少它对你有用。