2017-12-14 9 views
-1

に動的配列からオブジェクトを除去し、このような動的なオブジェクトの配列:の保存は、私が持っている静的アレイLibGdx

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

私は状況に応じて、このように、この配列を反復し、ランダムな要素を削除しています:

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

    } 

条件を満たす要素の一部のみが配列から削除されています。これらの削除された要素だけを静的配列に入れたいと思います。

本当に可能ですか?

答えて

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

私はあなたがここに非動的配列を使用することができますが、それは動的配列を使用することがはるかに便利であることに注意しなければなりません。たとえば、配列内のnull以外の参照の数を確認する必要はありません。動的配列をクリアするには、メソッド呼び出しが1つ必要です。非動的配列の場合は、ループでそれを行う必要があります。 考えてみてください。あなたのアプローチを変えたいと思うかもしれません。

+0

削除された値を静的配列に追加します。 – Niranjana

+0

add()の代わりに、静的配列には何を使用しますか? – Niranjana

+0

削除されたブロックの数が4を超えるとどうなりますか? – Arctic45

関連する問題