矢量迭代器在横向卷轴射击游戏中不可取消引用
vector iterator not dereferencable in side scrolling shooter
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
您遇到的问题有两个可能的原因:
-
您从不检查内部循环中是否
it == bulletVector.end()
,因此您不知道是否擦除了bulletVector
中的最后一个元素。 -
在内部循环中,您永远不会更新迭代器
that
,因此,如果您enemyVector
修改例如enemyDeSpawn
你可以使它无效。或者至少你会有一个无限循环。
相关文章:
- 在猜谜游戏 c++ 中不计算尝试次数
- 试图创建一个体面的基本刽子手游戏。猜出的字母不会取代短语中的字母
- 回复计划游戏结果不会显示
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- Craps游戏在循环不满足退出条件时执行
- 为什么我的石头剪刀布游戏不起作用?
- 防御性地应用 std::move 到平凡可复制的类型是否不可取
- 为什么 c++ 游戏不能使用计时器?
- C++井字游戏不显示X字符
- 矢量迭代器在横向卷轴射击游戏中不可取消引用
- 我简单的 c++ 文本游戏不起作用。我正在使用随机数生成,我很困惑
- 贪吃蛇游戏不起作用
- 贪吃蛇游戏 - 不能让蛇的身体跟随蛇头
- 太空射击游戏中的3D音效
- 井字游戏不起作用
- 虚幻引擎射击游戏示例中'class DataType* Variable' 'class'的内容
- 第 4 个射击语句在 SFML 游戏中不起作用
- 为什么游戏不使用表达式模板进行数学运算?
- 射击按钮在游戏中触发多次而不是一次时,按空格键
- 主机游戏不能正常工作