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

C++ 确保每次碰撞仅触发一次碰撞检测,c++,visual-c++,collision-detection,cocos2d-x,marmalade,C++,Visual C++,Collision Detection,Cocos2d X,Marmalade,我正在尝试不使用Box2d的碰撞检测, 所以我使用了一个内置函数CCRectIntersectsRect() 使用此函数,当我减少计数时,它会在一次碰撞中减少为负值。(当球碰到英雄时,当球越过英雄时。) 我所要做的就是以某种方式安排它,这样计数——只被调用一次 获取完整的源代码 创建一个名为碰撞的持久bool变量,并按如下方式使用它: if(CCRect::CCRectIntersectsRect(bom,gon)) { if (!colliding) count--;

我正在尝试不使用Box2d的碰撞检测, 所以我使用了一个内置函数CCRectIntersectsRect() 使用此函数,当我减少计数时,它会在一次碰撞中减少为负值。(当球碰到英雄时,当球越过英雄时。)

我所要做的就是以某种方式安排它,这样计数——只被调用一次

获取完整的源代码


创建一个名为
碰撞
的持久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初始化计数 如果(CCRect::CCRect交叉引用(bom、gon)&计数>0) { 计数--;
}

计数是英雄的生命(最初设置为3),并继续减少到0@jeet.mg:你可能放错地方了。你没有让它成为本地功能,是吗?(这是一个反问句,因为我几乎可以肯定你是这么做的)它需要在函数调用之间保持其值的位置。我试图在*.h中声明它,但它给出了一个未解决的外部错误。所以我故意这么做。@jeet.mg:这是一个成员函数吗?然后将变量作为类的成员。否则,可以将其设置为静态局部变量。我看到你的评论,你显然删除了,你有它作为一个静态。但是,您的代码是错误的,它没有做与我的代码相同的事情。你把别的东西放错地方了。让我再看一遍代码,我会告诉你如何修复它。@jeet.mg:是的,就像我说的。
else
位于错误的位置。我会在回答中加入固定版本。
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;