矢量迭代器在横向卷轴射击游戏中不可取消引用

vector iterator not dereferencable in side scrolling shooter

本文关键字:射击游戏 不可取 可取消 引用 迭代器 横向      更新时间:2023-10-16
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. 您从不检查内部循环中是否it == bulletVector.end(),因此您不知道是否擦除了bulletVector中的最后一个元素。

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