Cocos2d Бурундук физические объекты спит и не просыпается

Я использую Cocos2d v3 с Бурундуком для физики в моей игре. В моей игре есть шар, который падает на платформу с люком. Платформа и двери являются статическими объектами, поэтому они не будут падать от скорости шариков или от силы тяжести. Игрок контролирует открытие люка, поэтому, если мяч установлен на платформе или дверях, он в конечном итоге засыпает. Как только мяч установлен в спящий режим, когда дверь люка открыта, он не распознает, что объект больше не находится под мячом, поэтому мяч не будет двигаться.

Сейчас у меня есть функция, которая вызывается каждые 0,2 секунды, чтобы проверить мяч. Если он спит, он устанавливает свою скорость в (0, 0), что пробуждает мяч. Единственная проблема заключается в том, что таким способом частота кадров в игре снижается с 60 до 40-50. (У меня может быть до 30 разных шаров на уровне сразу, что сильно его замедляет)

Есть ли простой способ не дать мячу заснуть или разбудить его, когда дверь люка открывается? Или есть способ сохранить мои люки динамическими и не статичными, но не заставлять их двигаться, когда мяч сталкивается с ним.

1 ответ

Решение

Если вам нужно разбудить тело, вы можете попробовать использовать activate метод ChipmunkBody который используется внутри 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];

}
Другие вопросы по тегам