我试图让我的角色在我自己的基于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,但我觉得奇怪的是它不会在最新的条目上做到这一点,我不知道怎么做这个正确。
我希望这是足够的信息,以便对我的问题有所了解。如果没有,请告诉我,我会提供更多。
while
和if else
子句,请考虑将嵌套缩进级别格式化得更清楚一些。isColliding(Entity)
是一个布尔值,因此在检查为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;
break; // exit criteria met
}
else
{
player->grounded = false;
}
it++;
}
}