Попытка сделать действие вызывается каждые 5 секунд - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь создать класс под названием таймер. Предполагается, что класс таймера вызывается, когда мой персонаж входит в зону врага. А класс таймера должен удалять здоровье персонажей на 10 пунктов здоровья каждые 5 секунд. Я пробовал несколько разных таймеров, но я не могу понять, какой из них правильный. Когда я пытался это убрать здоровье, но он не делал это только один раз, он продолжал повторять это, пока индикатор здоровья не исчез из экрана. вот мой код:

class Timer {
    g = new gubbe();
    gubbe g;
    Timer timer = new Timer(3000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            g.RemoveHealth();
        }
    });
    timer.setRepeats(false); 
    timer.start();
 }

Это то, что я придумал до сих пор. Если вам нужен еще какой-либо код, просто спросите.

1 Ответ

1 голос
/ 30 октября 2019

Вот класс, который вы можете использовать для определения времени ваших событий:

class Delay {
  protected int limit;

  public Delay() {limit = millis();}
  public Delay (int l) {
    limit = millis() + l;
  }

  public boolean expired () {
    if (millis() > limit) { return true; }

    return false;
  }
}

Чтобы проверять что-либо каждые 5 секунд, вы должны инициализировать это следующим образом:

Delay _delay;

void setup() {
  _delay = new Delay(5000);
}

void draw() {
  if (_delay.expired()) {
    //do something
    _delay = new Delay(5000);
  }
}

5000 в миллисекундах, значит 5 секунд. Если вы хотите проверить задержку в 1 секунду, вместо этого будет 1000. Мы повторно инициализируем его, когда задержка заканчивается, поэтому он запускается снова через 5 секунд.

Веселитесь!

...