gpt4 book ai didi

c++ - 项目符号列表 C++

转载 作者:行者123 更新时间:2023-11-28 06:34:40 24 4
gpt4 key购买 nike

我正在使用 Directx9 和 C++ 编写魂斗罗游戏请帮我了解项目符号列表

我正在尝试下面的代码,但它是错误的:vector intertor incompatible

 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 block 内。这是 for(...) 通常优于 while(...) 的原因之一:

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

}
}

其实Update函数也应该做同样的改动,只是省略了++it

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com