矢量迭代器在侧滚动射击游戏中不能解除引用

时间:2017-01-18 08:34:03

标签: c++ c++11

void MyScene::bulletTest() {
    std::vector<Bullet*>::iterator it = bulletVector.begin();
    //auto it = std::adjacent_find(bulletVector.begin(), bulletVector.end());
    while (it != bulletVector.end()) {
        std::vector<Enemy*>::iterator that = enemyVector.begin();
        //auto that = std::adjacent_find(enemyVector.begin(),`enter code here`enemyVector.end());
        while (that != enemyVector.end()) {
            if ((*it)->isCollidingWith((*that))) {
                Bullet* b = (*it);
                this->removeChild(b);
                it = bulletVector.erase(it);
                delete b;

                enemyDeSpawn();
            }
            else
            {
                it++;
            }
        }
    }
}

我正试图在我的老师的引擎构建中测试我的敌人的子弹,虽然我不能让它运行,但是当我射击我的敌人时,现场有不止一个游戏崩溃。

我会为感兴趣的人链接引擎的源代码, https://github.com/rktrlng/rt2d

1 个答案:

答案 0 :(得分:0)

您遇到问题可能有两个原因:

  1. 您永远不会检查内循环中是否it == bulletVector.end(),因此您不知道是否删除bulletVector中的最后一个元素。

  2. 在内部循环中,您永远不会更新迭代器that,因此如果您修改enemyVector,例如enemyDeSpawn您可以使其无效。或者至少你会有一个无限循环。