2014-12-13 3 views
1

https://github.com/libgdx/libgdx/wiki/Extending%20the%20Simple%20Game Как это сделать, чтобы iter.remove(); будет происходить каждую секунду больше или меньше? Я имею в виду, что с момента появления новой версии программа будет считать секунду более или менее и вызовет iter.remove() ;.libGDX: Снятие итератора после определенного времени

Вот код из ссылки, которые используют итератор:

Iterator<Rectangle> iter = raindrops.iterator(); 
    while (iter.hasNext()) { 
     Rectangle raindrop = iter.next(); 
     raindrop.y -= 200 * Gdx.graphics.getDeltaTime(); 
     if (raindrop.y + 64 < 0) 
      iter.remove(); 
     if (raindrop.overlaps(bucket)) { 
      dropsGathered++; 
      dropSound.play(); 
      iter.remove(); 
     } 
    } 

Кстати, я могу использовать тот же раствор, чтобы создать пробку секунды? На данный момент я создал пробку для своей игры, 60 секунд игрового времени. Для работы пробника я в основном создал int stopper = 60; и до тех пор, пока игра запустится, число будет уменьшаться на 1. Проблема в том, что она слишком быстро уменьшается!

метод Таймер:

decreaseTime(int minus){ 
// timer is equal to 60  
    timer -= minus; 
} 

ответ

0

В методе визуализации, дельта используется для отслеживания времени (в смысле - он показывает количество времени последнего кадра потребовалось, чтобы получить визуализации, поэтому он не может всегда постоянный), и вы должны использовать delta, поскольку разные устройства имеют разные частоты кадров. Причина, по которой ваш стоппер идет слишком быстро, состоит в том, что цикл визуализации вызывается так много раз в секунду (например, на устройстве с частотой 30 кадров в секунду, он называется 30 раз в секунду).

Так что, если вы хотите, чтобы сделать какие-то действия каждые 5 секунд, вы могли бы сделать что-то вроде:

int timeTracker = 0; // Do this outside render since you don't want to keep setting it to 0. 

// Inside render 
if (timeTracker >= 5){ 
     timeTracker = 0; 
     // Do something 
} else { 
     timeTracker += delta; 
} 

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

Если вы хотите, чтобы каждая капля потеряла секунду после ее создания, вам нужно будет реализовать класс raindrop, чтобы отслеживать каждую дождевую капли и количество времени, в которое оно было создано. Затем вы можете пройти через дождевые капли и уничтожить тех, кто был создан более одной секунды. Опять же, не самый элегантный, но простой в реализации.

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

Iterator<Raindrop> iter = raindrops.iterator(); 
    while (iter.hasNext()) { 
     Raindrop raindrop = iter.next(); 
     if (raindrop.timeSinceCreation >= 1){ 
      raindrop.dispose(); 
     } else { 
      raindrop.incrementTimer(delta); 
     } 
    } 
+0

Я изменил число в состоянии 1 и в «Сделай что-нибудь» я назвал метод его, таймер \ стопором в «decreaseTime (1)», но он ничего не делал ... –

+0

Код в метод рендеринга. Метод таймера, о котором я упоминал, используется для таймера, который будет помещен в игру для игрока. Я редактировал код с помощью метода таймера. –

+0

Хорошо, я удержался, о том, как заставить каплю исчезнуть. Но я все еще не получаю таймер. Я попытался ввести метод таймера к условию создания нового капли, и это сработало, таймер снижался должным образом каждую секунду, но каждый раз, когда я нажимаю на капли, таймер останавливается и продолжает после исчезновения капли ... –

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