2016-01-20 3 views
1

У меня есть этот ArrayList:Удаление элемента из ArrayList каждые 500 кадров

// Add predators 
predators = new ArrayList(); 
for (int i = 0; i < predNum; i++) { 
    Creature predator = new Creature(random(width), random(height), 2); 
    predators.add(predator); 
} 

Как утверждение быть структурирована таким образом, что последний элемент из predators ArrayList удаляется каждые 500 кадров? Нужна ли ему петля?

if (frameCount == 500){ 
predators.remove(1) 
} 
+0

вы хотите удалить 1 элемент из списка или все в ArrayList удаляется? – logger

+1

Что такое рамка? Что такое каждые 500 кадров? Никогда не слышал об этом термине ... – RAnders00

+0

@ user3659052 только последний элемент в массиве каждый раз, когда программа делает 500 кадров. –

ответ

5

Если у вас уже есть переменная, которая отслеживает то, что кадр вы находитесь, вы можете использовать это, если заявление:

if (frameCount % 500 == 0) { 
    predators.remove(1); //use this if you want to remove whatever is at index 1 every 500 frames 
    predators.remove(predators.size() -1); //use this if you want to remove the last item in the ArrayList 
} 

Поскольку вы использовали 1 в качестве аргумента для метода удалить из ArrayList, я тоже, но учтите, что это всегда будет удалить 2-й объект в ArrayList, так как ArrayList индексы начинают отсчет с 0.

это будет работать только каждый раз, когда FrameCount кратен 500.

Если вы еще не отслеживаете frameCount, вам нужно будет поместить frameCount++ в цикл, который выполняется каждый кадр.

+0

Удивительно, это точно то, что я искал. Большое спасибо. Любые идеи, хотя почему это может удалить половину элементов в arraylist, а не только один элемент? –

+1

Что вы подразумеваете под половиной элементов? Если вы включите только вторую строку predators.remove, она должна удалить только последний элемент. Поэтому каждые 500 кадров один хищник должен быть удален из списка. Разве это не то, что происходит? –

+0

Nah. Должна быть ошибка где-то тогда Оба метода, которые вы предложили, были опробованы. Когда я делаю второй метод, я получаю вывод: 5 2 1 0 (количество оставшихся элементов, каждая итерация) –

2

Функция draw() называется 60 раз в секунду, так что это цикл, который вы будете использовать. Переменная frameCount автоматически увеличивается каждый раз, когда вызывается draw().

Like The Coding Wombat сказал, вы можете использовать the modulo operator, чтобы определить, когда переменная (например, frameCount) является кратным значением (например, 500).

Вы можете объединить эти идеи, чтобы сделать что-то когда-либо 500 кадров:

ArrayList<Creature> predators = new ArrayList<Creature>(); 

void setup(){ 
    for (int i = 0; i < predNum; i++) { 
    Creature predator = new Creature(random(width), random(height), 2); 
    predators.add(predator); 
    } 
} 

void draw(){ 
    if (frameCount % 500 == 0){ 
    predators.remove(predators.size()-1); 
    } 

    //draw your frame 
} 
+0

Не удаляет (0) удаляет первый указатель арраиста вместо последнего, как попросил афер? –

+1

@ TheCodingWombat Хороший улов. Ред. Кстати, ваш ответ правильный, но я добавил, что мой ответ будет более конкретным для обработки. –

+0

Я только сейчас понимаю, что обработка тегов на самом деле является именем языка программирования/рамки вместо него, что означает, что он обрабатывал arraylist. –

Смежные вопросы