2017-12-14 5 views
-1

에 동적 배열에서 객체를 삭제 이런 동적 객체 어레이 :저장하는 I 가진 정적 배열 LibGdx

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

I은 ​​조건에 따라 이런이 배열을 반복 랜덤 요소를 제거하고 :

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이 아닌 참조가 몇 개인 지 확인할 필요가 없습니다. 그리고 동적 배열을 지우는 것은 하나의 메서드 호출을 필요로합니다. 동적 배열이 아닌 경우에는 루프로 처리해야합니다. 그것에 대해 생각해보십시오. 어쩌면 접근 방식을 바꾸고 싶을 것입니다.

+0

삭제 된 값을 정적 배열에 추가하고 싶습니다. – Niranjana

+0

add() 대신 정적 배열에 사용할 요소는 무엇입니까? – Niranjana

+0

제거 된 블록 수가 4를 초과하면 어떻게됩니까? – Arctic45