Убедитесь, что обнаружение столкновений срабатывает только один раз за столкновение - PullRequest
0 голосов
/ 30 января 2012

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

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

Для полного исходного кода как использовать box2d для обнаружения столкновений в cocos2d-x

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

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

Ответы [ 2 ]

1 голос
/ 30 января 2012

Создайте постоянную переменную bool с именем 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 голосов
/ 30 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...