2015-11-23 4 views
-8

Проблема, с которой я столкнулась, заключается в том, что я создал список с объектом внутри, но когда игрок сталкивается с объектом, о котором идет речь, я не могу удалить его из списка.Удаление объекта из списка и игры?

//This is where the issue is 
foreach (Objective seagull in seagulls) 
{ 
    if (Objective.visable == false) 
    { 
     seagulls.Remove(seagull); 
    } 
} 

EDIT: Моя проблема теперь после перехода к для цикла является то, что удалить не работает, я понятия не имею, что функция удаляемый просят у меня?

+5

Пожалуйста, покажите свой код и сообщение об исключении как текст в самом вопросе. Люди не должны следить за сторонними сайтами, чтобы увидеть ваш код. –

+0

У меня не может быть слишком много кода? – Adam

+0

И попробуйте как можно больше упростить код, чтобы быстро добраться туда, где вы застряли. С текущим исходным кодом может потребоваться много времени, чтобы понять, что вы делаете и где находится реальная проблема. Кроме того, когда вы нажимаете на детали в отладчике при показе сексуального насилия, что вы получаете там? Есть ли стек? – HimBromBeere

ответ

2

При использовании for вы должны использовать RemoveAt, так как он будет ссылаться на ваш индекс. Remove ожидает, что значение будет соответствовать, это может быть частично, почему ваша новая реализация for не работает.


Причина, по которой вы получаете эту ошибку, заключается в том, что вы перечисляете коллекцию, которая была изменена. Если вы используете цикл for, вместо foreach вы сможете выполнять итерацию при удалении определенных индексов. В противном случае вам нужно будет создать отдельный файл List, который является копией вашего List. Удалите его, а затем сравните с другим.

int total = example.Count; 
List<Example> example; 
for(int i = 0; i < total; i++) 
    if(...) 
    { 
      example.RemoveAt(i); 
    } 

Условный будет ваш чек, прежде чем удалять. Я не уверен, что это будет, но это было бы похоже на это. Я немного упростил код для краткости.

+0

Почему голос? – Greg

+0

Ваш пример работает, но только для уточнения. Если объект удаляется из списка, это означает, что он прекращает иссечение, поэтому вся логика для этого объекта перестает работать. Потому что, хотя я больше не получаю ошибок, оценка продолжает расти, как если бы объект был там. – Adam

+0

Вот новый код, если (Player.playerBound.Intersects (Objective.objectBound)) { Objective.visable = false; Player.score = Player.score + 10; для (int i = seagulls.Count - 1; i> = 0; i--) { if (Objective.visable == false) { seagulls.RemoveAt (i); } } } – Adam

0

Yo может поставить некоторый флаг, как «активные» в ваших «чайка», а затем удалить все

seagulls.removeall(c => c.active == false) 
Смежные вопросы