我有一个空间对象数组(我的东西),我需要减少但保持相同的名称才能处理一些碰撞。我将我的阵列设置为:
ufo** ufoAr = new ufo*[numberOfUfos];
for (int i=0; i<numberOfUfos; i++) {
ufoAr[i] = new ufo(randomIntBetween(1630, 70), randomIntBetween(860, 45));
}
当我检测到碰撞时,我想用两个以下的数据调整我的数组大小并删除两个特定的数组元素。像这里:
//look through all the ufoAr[]
for (int i=0; i<numberOfUfos; i++) {
//look through ufoAr[] again to see other objects
for(int j=0; j<10; j++) {
//if the same
if (i==j){ continue; }
else {
//find a collision
if(ufoAr[i]->collision(ufoAr[j]->sp)) {
//Array::Resize(ufoAr, numberOfUfos-2);
//numberOfUfos = numberOfUfos - 2;
// ------ TRY TO RESIZE ARRAY TO -2 BUT SAME NAME WITHOUT iTH AND jTH ELEM
ufoAlive[i] = false;
ufoAlive[j] = false;
}
}
}
}
我非常感谢有关调整阵列大小的任何帮助,谢谢先进。我真的很挣扎,需要另一种意见。感谢
杰克
答案 0 :(得分:0)
为此,您需要首先创建一个新阵列,例如
ufo** ufoArTmp = new ufo*[numberOfUfos-2];
然后将ufoAr
的内容[您要保留]复制到ufoArTmp
。完成后,您执行delete [] ufoAr
,最后ufoAr = ufoArTmp;
更新原始指针。此时不要删除ufoArTmp
,因为它与ufoAr
中的值相同,并且您希望保留该值,正确。
当你开始...... {)时,显然要特别注意numberOfUfos
小于2;
编辑,阅读其他代码:
不要这样做:
if (i==j){ continue; }
else {
好多了:
if (i!=j) {
答案 1 :(得分:0)