【发布时间】:2013-11-02 23:31:01
【问题描述】:
我已经查看了大约 10 个关于同一消息的答案,但还没有找到我的问题。
在 Level 类的 level.h 中:
std::vector<Bomb> m_bombs;
在 level.cpp 中:
添加炸弹:
Bomb bomb;
bomb.owner = player;
bomb.power = power;
bomb.x = pos.x;
bomb.y = pos.y;
bomb.timer = 3.0f;
m_bombs.push_back(bomb);
检查炸弹(每一帧):
void Level::updateBombs(float dt)
{
for(int i = 0; i < m_bombs.size(); i++)
{
m_bombs[i].timer -= dt;
if(m_bombs[i].timer <= 0)
m_bombs.erase(m_bombs.begin() + i);
}
}
我 100% 确定程序会在调用擦除函数的那一行崩溃。我能够从向量中输出信息,这使得这种方式更加混乱。炸弹在向量中是正确的。如果我执行 m_bombs.remove_last() 它会删除向量中的最后一个元素。似乎只是擦除和开始()有问题。
【问题讨论】:
-
两个 cmets:(1) 如果您
erase()索引处的元素i,则需要再次检查索引i,因为旧索引i+1已移动到i. (2) 不建议在游戏中使用可变时间步长,因为它会导致难以重现的意外行为。