将将对象从动态数组中删除到静态数组libgdx



我有一个动态对象数组:

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

我像这样迭代此数组,并根据条件删除随机元素:

for (Block d : blocks) {
    if (b.checkBlockCollision(frame)) {
        blocks.removeValue(d, true);
    }

只有某些满足条件的元素才从数组中删除。

真的可能吗?

如果删除循环中的元素,则不应使用foreach循环。看看这个问题。话虽这么说,例如,您可以这样做:

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++;
        }
    }
}

我必须注意,尽管您可以在此处使用非动态数组,但是使用动态数组会更加方便。例如,您不必检查数组中有多少个非无编号引用。清除动态阵列需要一个方法调用,当使用非动态数组时,您需要在循环中进行。考虑一下,也许您会想改变您的方法。

最新更新