我有一个非常奇怪的问题,如果我要说的话听起来很傻,我会提前道歉。
我正在开发一款简单的3D游戏,我在MacBook Pro上使用c ++,OpenGL 4.1和Xcode 9.2。我是初学者,我正在与对象的向量斗争。特别是,我设法创建了一个给定对象的几个实例,并在我的场景中显示它们。我现在正试图一次处理一个对象的删除,首先是为了简单起见。因此,我只是将erase()函数应用于向量,但是,即使实际上只删除了向量中的第一个元素,最后一个元素也会从场景中消失。 我检查了迭代器正在正确扫描更新的列表(尽管没有必要,因为删除是在for循环之外)。我还暂停了程序并查看了内存以查看最后一个对象是否仍然存在,而且确实存在。我认为最后一个对象只是与另一个对象重叠,但并不是因为它的模型转换矩阵与其他对象不同。 作为最后一次测试(我现在绝望了),我已经编写了一部分代码,在重复使用erase()之后没有留下任何元素时重新push_back()s。问题依然存在。 我能做错什么? 这是代码的一部分(想象一下,向量“blocks”在开头已有6个元素):
if (fire){ // mouse button pressed
fire = false;
num_of_blocks--;
blocks.erase(blocks.begin()); //delete first element, but last disappears!!
if (num_of_blocks==0){
first = true;
num_of_blocks = 6;
}
}
if (first){
first = false;
Vector3f pos = Vector3f(0,1,-3);
for (int i=0; i<num_of_blocks;i++){
pos.z() -= 2;
Parallelepiped newBlock = Parallelepiped(_textureWall.GetID(),2.0f,0.5f,1.2f);
blocks.push_back(newBlock);
blocks[i].setPosition(pos);
}
}
for (vector<Parallelepiped>::iterator it = blocks.begin(); it !=blocks.end(); it++){
drawObject(&shaders[0], &(*it));
}
提前谢谢你。