我正在用Directx9和C ++编写对战游戏
请帮我有关子弹清单

我正在尝试下面的代码,但它是错误的:向量intertor不兼容

 std::vector<Bullet*> bullets
if (mKeyboard->IsKeyPress(DIK_X))
{
    Bullet* toShoot = new Bullet(noneType, _position.x, _position.y, RIGHT);
    toShoot->Init();
    bullets.push_back(toShoot);
}


更新功能:

 std::vector<Bullet*>::iterator it = bullets.begin();


 while ((it) != bullets.end())
  {
    (*it)->Update(gameTime, c);

    if ((*it)->IsLive() == false)
    {
        bullets.erase(it++);
    }
  }


渲染功能

std::vector<Bullet*>::iterator it = bullets.begin();
while (it != bullets.end())
{
    if ((*it)->IsLive())
    {
        (*it++)->Render(gr, cx, cy);
    }
}

最佳答案

您不能仅仅增加传递给erase(…)的迭代器。改为这样做:

if (!(*it)->IsLive()) {
  it = bullets.erase(it);
} else {
  ++it;
}


您的渲染功能有一个不同的错误。由于增量位于if块内部,因此卡在第一个非活动项目符号上。这是for(…)通常优于while(…)的原因之一:

for (auto it = bullets.begin(); it != bullets.end(); ++it) {
    if (…) {
        …
    }
}


实际上,应同样更改Update函数,但省略++it

关于c++ - 项目符号列表C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26942267/

10-11 18:15