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

Ensure collision detection triggers only once per collision

本文关键字:一次 碰撞检测 碰撞 确保      更新时间:2023-10-16

我尝试在不使用Box2d的情况下进行碰撞检测,所以我使用了一个内置函数CCRecectIntersectsRev()使用这个函数,当我减少计数时,它会在一次碰撞中减少到负值。(当球碰到英雄和球越过英雄时。)

我只想以某种方式安排它,这样计数只会被调用一次。

完整的源代码如何使用box2d在cocos2d-x 中进行碰撞检测

CCRect bom= ball->boundingBox();
CCRect gon= hero->boundingBox();
if(CCRect::CCRectIntersectsRect(bom,gon))
{
    count--;
}

创建一个名为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;

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