2014-07-10 2 views
0

나는 현재이 시스템을 구현하고 있는데, 미니언이 죽을 때 나는 미니언의 x 위치를 -100으로 설정하여 화면 밖으로 이동시킨다. 그러나 더 많은 수의 부하를 추가하면 내 안드로이드 게임 속도가 느려질 것입니다. 이 미니언을 게임에서 완전히 제거하는 더 좋은 방법이 있습니까?적을 죽일 수있는 효율적인 방법

아래 코드에 대한 설명. 각 미니언은 특정 시간 간격으로 생성되고 minionarray라는 arraylist에 추가됩니다. 거기에서 minionarray의 각 미니언은 부울 isDead가 해당 미니언에 대해 참인지 확인합니다. 그것이 사실이라면 miniondeath Animation이 시작되고 끝날 때 미니언은 -100으로 설정되어 화면에서 그를 제거합니다. 이 미니언을 게임에서 완전히 제거하는 더 좋은 방법이 필요합니다.

피로 - 해결. Gil Moshayef의 방법이 가장 효과적이었습니다! 모두에게 감사 드려요!

for (Minions m : minionarray) { 
    m.update(); 
    if (m.isDead() == true) { 

     m.setMinionSpriteCurrent(minDeath.getImage()); 
     m.setSpeedX(0); 
     if (minDeath.getImage() == minDeath4) { 
      m.setCenterX(-100); 

     } 
    } 
} 
+3

죽은 부하들을 제거하려고합니다. – chf

답변

1

배열에서 제거해야합니다.

당신이 루프 정상으로 변경하는 경우는 있지만,이처럼 방법 "각각은"에서 반복되는 배열에서 항목을 제거하는 문제의 비트를 할 수있는 것 :

Minion m; 
for (int i = 0; i < minionArray.size(); i++) { // I'm assuming minionArray is a List type 
    m = minionArray.get(i); 
    m.update(); 
    if (m.isDead() == true) { 

     minionArray.remove(i); 
     i--; // set the pointer back by 1 so you don't skip updating the next minion in the list. 
    } 
} 
+0

이것은 물론 작동합니다 ...하지만 for-loop의 인덱스를 수정하는 것은 잘못된 것입니다. 오히려 while 루프를 사용하여 깨끗하게 유지하십시오. –

+0

이 방법이 마음에 들지 않으면 다른 배열에서 제거해야하는 모든 하위 항목을 누적 한 다음 반복이 완료된 후 제거해야하지만이 방법은 더 나은 런타임을 가질 수 있습니다. for 루프의 인덱스를 변경하는 것은 괜찮 으면 좋겠지 만, 더 편안하게 만들면 while 루프에서도 동일한 작업을 수행 할 수 있습니다. –

+0

OP와 같이 foreach를 사용하는 것은 어떻습니까? 목록에서 객체를 제거하기 위해 색인이 필요하지 않습니다. http://developer.android.com/reference/java/util/List.html#remove(java.lang.Object) – Marius

2

이동하지 말고 가비지 수집기에서 제거하도록 null로 설정하는 것이 좋습니다. 이렇게하면 메모리를 차지하지 않고 처리 능력을 사용하지 않게됩니다. (현재 루프가 작동하는 방식, 이동하지 않은 경우 false로 설정하면 -100으로 계속 이동합니다.)

+0

흠, 시도했지만 오류가 발생합니다. 그래도 도와 ​​줘서 고마워! – Zod

0

minionarray 목록에서 미니언을 제거하면됩니다. 스프라이트를 그리고 업데이트하기 위해리스트를 반복하고 있다고 가정합니다; 목록에서 목록을 삭제할 때 해당 작업을 하수인에게 적용 할 필요가 없습니다.

if (m.isDead()) 
{ 
     minonarray.remove(m); 
} 
+0

은 현재 반복 방법에 오류가 발생합니다 –

+0

이로 인해 어떤 이유로 오류가 발생했습니다. 비록 도움을 주셔서 감사합니다 :) – Zod

관련 문제