如何在检查碰撞时确保布尔值保持为真

问题描述 投票:0回答:1

我试图让我的角色在我自己的基于SDL2的框架中登陆平台。目前它没有工作,因为,如果我有一个以上的平台,这是默认,如果我产生一个。角色只会留在最后添加的平台上。当grounded布尔从true切换到false时,它将慢慢地通过。

这是我的代码:

void NHTVScene::EntitiesGrounded()
{
    std::vector<Entity*>::iterator it = platformVector.begin();
    while (it != platformVector.end()) {
        if (player->isColliding((*it))) {
        player->velocity = Vector2(0, 0);
        player->grounded = true;
    }
    else if (!player->isColliding((*it))) {
        player->grounded = false;
    }

    it++;
    }
}

每个deltatime更新都会调用此函数。

我知道这个代码使得每个平台都没有碰撞,布尔值被设置为true,但我觉得奇怪的是它不会在最新的条目上做到这一点,我不知道怎么做这个正确。

我希望这是足够的信息,以便对我的问题有所了解。如果没有,请告诉我,我会提供更多。

c++ c++11 sdl-2
1个回答
0
投票
  1. 使用适当的缩进更容易区分whileif else子句,请考虑将嵌套缩进级别格式化得更清楚一些。
  2. 我假设isColliding(Entity)是一个布尔值,因此在检查为true之后检查false应该是不必要的。考虑简化这种逻辑。
  3. 如果你想在发现碰撞后将玩家建立为接地,那么这应该是你的退出标准。

这样的事情应该做你想要的。

void NHTVScene::EntitiesGrounded()
{
    std::vector<Entity*>::iterator it = platformVector.begin();
    while (it != platformVector.end())
    {
        if (player->isColliding((*it)))
        {
            player->velocity = Vector2(0, 0);
            player->grounded = true;
            break; // exit criteria met
        }
        else
        {
            player->grounded = false;
        }
        it++;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.