将删除的对象从动态数组存储到静态数组-LibGdx
Storing removed objects from a dynamic array to a static array-LibGdx
我有一个这样的动态对象数组:
private Array<Block> blocks=new Array<Block>();
我正在像这样迭代这个数组并根据条件删除随机元素:
for (Block d : blocks) {
if (b.checkBlockCollision(frame)) {
blocks.removeValue(d, true);
}
只有一些满足条件的元素被从array.I中删除,只想将这些删除的元素放入静态数组。
真的可以吗?
如果您删除循环内的元素,则不应使用 forEach 循环。看看这个question。
话虽这么说,你可以这样做,例如:
private Array<Block> blocks = new Array<Block>();
private Block[] removedBlocks = new Block[4];
void someMethod() {
//...
// skip non-null removed blocks
int j = 0;
for (Block b : removedBlocks) {
if (b != null) j++;
}
int i = 0;
while (i < blocks.size) {
if (blocks.get(i).checkBlockCollision(frame)) {
//removing by index is faster, and it returns removed element, so you can do it like this
removedBlocks[j++] = blocks.removeIndex(i);
if (j == removedBlocks.length) {
//game over
break;
}
} else {
i++;
}
}
}
需要注意的是,这里虽然可以使用非动态数组,但是使用动态数组会方便很多。例如,您不必检查数组中有多少个非空引用。清除动态数组只需要一次方法调用,当使用非动态数组时,您需要在循环中进行。
想想看,也许你会想改变你的做法。
我有一个这样的动态对象数组:
private Array<Block> blocks=new Array<Block>();
我正在像这样迭代这个数组并根据条件删除随机元素:
for (Block d : blocks) {
if (b.checkBlockCollision(frame)) {
blocks.removeValue(d, true);
}
只有一些满足条件的元素被从array.I中删除,只想将这些删除的元素放入静态数组。
真的可以吗?
如果您删除循环内的元素,则不应使用 forEach 循环。看看这个question。 话虽这么说,你可以这样做,例如:
private Array<Block> blocks = new Array<Block>();
private Block[] removedBlocks = new Block[4];
void someMethod() {
//...
// skip non-null removed blocks
int j = 0;
for (Block b : removedBlocks) {
if (b != null) j++;
}
int i = 0;
while (i < blocks.size) {
if (blocks.get(i).checkBlockCollision(frame)) {
//removing by index is faster, and it returns removed element, so you can do it like this
removedBlocks[j++] = blocks.removeIndex(i);
if (j == removedBlocks.length) {
//game over
break;
}
} else {
i++;
}
}
}
需要注意的是,这里虽然可以使用非动态数组,但是使用动态数组会方便很多。例如,您不必检查数组中有多少个非空引用。清除动态数组只需要一次方法调用,当使用非动态数组时,您需要在循环中进行。 想想看,也许你会想改变你的做法。