2012-01-30 2 views
0

Я пытаюсь обнаружить столкновение без использования Box2d, , поэтому я использовал встроенную функцию CCRectIntersectsRect() , используя эту функцию, когда я уменьшаю счет, который уменьшается до отрицательных значений за одно столкновение. (когда мяч касается героя и когда мяч пересекает героя.)Убедитесь, что триггеры обнаружения столкновений только один раз за столкновение

Все, что я хочу, это запланировать его каким-то образом, чтобы счетчик был вызван только один раз.

Для завершения исходного кода how to use box2d for collision detection in cocos2d-x

CCRect bom= ball->boundingBox(); 
CCRect gon= hero->boundingBox(); 

if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    count--; 
} 

ответ

1

Создать постоянную переменную Ую под названием colliding, и использовать его как это:

if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    if (!colliding) 
     count--; 
    colliding = true; 
} 
else 
    colliding = false; 

Вот исправление кода, содержащийся в комментариях ниже:

CCRect bom= roll->boundingBox(); 
CCRect gon= hero->boundingBox(); 
static bool colliding=false; 
if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    if (!colliding) 
    { 
     intersection(); 
     colliding = true; 
    } 
} 
else 
    colliding = false; 
+0

Позвольте мне попробовать, я думаю, что это не повлияет на код. –

+0

nope, это не сработало :( –

+0

@ jeet.mg: Вы, вероятно, положили его в неправильное место. Вы не сделали его локальным для этой функции? (Это был риторический вопрос, потому что я почти определенно, что вы это сделали) Он должен находиться в месте, где его значение будет сохраняться между вызовами функций. –

0

Инициализировать счет с помощью 1 if (CCRect :: CCRectIntersectsRect (bom, gon) & & count> 0) { count--; }

+0

count - это жизнь героя (первоначально установлена ​​на 3) и продолжает уменьшаться до 0 –

+0

, если count == 0 герой мертв –