将已移除的对象从动态数组存储到静态数组-LibGdx

时间:2017-12-14 10:09:14

标签: libgdx

我有一个像这样的动态对象数组:

(?^:$foo)

我正在迭代这个数组并根据条件删除随机元素:

private Array<Block> blocks=new Array<Block>();

只有一些满足条件的元素才会从数组中删除。我想只将这些被删除的元素带入静态数组。

这真的有可能吗?

1 个答案:

答案 0 :(得分:1)

如果删除循环内的元素,则不应该使用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++;
        }
    }
}

我必须注意,虽然你可以在这里使用非动态数组,但使用动态数组会更方便。例如,您不必检查数组中有多少非空引用。清除动态数组需要一个方法调用,当使用非动态数组时,需要在循环中执行。 想一想,也许你会想改变你的方法。