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

发布于 2024-12-31 22:56:28 字数 481 浏览 1 评论 0原文

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

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

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

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

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

I am trying collision detection without using Box2d,
so i used a inbuilt function CCRectIntersectsRect()
using this function when i decrement the count it gets reduced to negative values in a single collision. (when the ball touches hero and when the ball crosses hero.)

All i want is to schedule it in someway so that the count-- gets called once only.

For complete source code how to use box2d for collision detection in cocos2d-x

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

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

Create a persistent bool variable called colliding, and use it like this:

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

Here's the fix for the code you provided in the comments below:

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;
剩一世无双 2025-01-07 22:56:28

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

initialize count with 1
if(CCRect::CCRectIntersectsRect(bom,gon) && count > 0)
{
count--;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文