确保碰撞检测每次碰撞仅触发一次

时间:2012-01-30 05:19:36

标签: c++ visual-c++ collision-detection cocos2d-x marmalade

我正在尝试不使用Box2d进行碰撞检测, 所以我使用了内置函数CCRectIntersectsRect() 使用此功能,当我减少计数时,它会在单次碰撞中减少到负值。 (当球接触英雄并且球越过英雄时。)

我想要的只是以某种方式安排它,以便count--只被调用一次。

完整的源代码how to use box2d for collision detection in cocos2d-x

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

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

2 个答案:

答案 0 :(得分:1)

创建一个名为colliding的持久性bool变量,并按如下方式使用它:

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;

答案 1 :(得分:0)

用1初始化计数     if(CCRect :: CCRectIntersectsRect(bom,gon)&& count> 0)     {         计数 - ;     }