我正在用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/