将删除的对象从动态数组存储到静态数组LibGdx

将删除的对象从动态数组存储到静态数组LibGdx,libgdx,Libgdx,我有一个动态对象数组,如下所示: private Array<Block> blocks=new Array<Block>(); 只有一些满足条件的元素从数组中删除。我只想将这些删除的元素放入静态数组 这真的有可能吗?如果删除循环中的元素,就不应该使用forEach循环。看看这个。 也就是说,您可以这样做,例如: private Array<Block> blocks = new Array<Block>(); private Block[] r

我有一个动态对象数组,如下所示:

private Array<Block> blocks=new Array<Block>();
只有一些满足条件的元素从数组中删除。我只想将这些删除的元素放入静态数组


这真的有可能吗?

如果删除循环中的元素,就不应该使用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++;
        }
    }
}
private Array blocks=new Array();
私有块[]removedBlocks=新块[4];
void方法(){
//...
//跳过非空删除块
int j=0;
用于(块b:移除的块){
如果(b!=null)j++;
}
int i=0;
而(i
我必须注意,虽然您可以在这里使用非动态数组,但使用动态数组会方便得多。例如,您不必检查数组中有多少个非空引用。清除一个动态数组需要一个方法调用,当使用非动态数组时,需要在循环中执行。
想一想,也许你会想改变你的方法。

我想在静态数组中添加删除的值。而不是add(),静态数组使用什么?当删除的块数超过4时会发生什么?我尝试了这个。但是当我打印removedBlocks数组时,只有第零个索引包含删除的元素。所有其他索引都为空。每当新删除的元素出现时,它仅占用第零个索引。我希望按顺序插入前四个冲突/删除的元素。再次更新。
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++;
        }
    }
}