每隔X秒运行一次方法

时间:2017-11-04 19:17:34

标签: java timer

我正在用Java创建一个基于文本的游戏作为我自己的第一个官方程序。 这是饥饿,口渴和体温变量的生存游戏。

让我们说,我希望饥饿和口渴每5秒左右减少一次。 我现在唯一可以上班的是这个。 这肯定会减少数字,但是它会在2秒内从100变为0。

public void run(){
  while(running){
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while(delta >= 1){
            tick();
            delta--;
        }
    }
private void tick(){
  Health.playerHealth.tick();
}

///////////////////////////////////////////////

public static Health playerHealth = new Health();

private static int hunger = 100;
private static int thirst = 100;
private static double bodyTemperature = 98.6;

public void tick(){
    depleteHunger();
    depleteThirst();
    depleteBodyTemperature();
}

public void depleteHunger(){
    hunger--;

}

public void depleteThirst(){
    thirst--;
}

我也尝试了这个计时器,但它只等了5秒我放入 THEN 从100减少到0

private void tick(){

Timer t = new Timer();
  t.schedule(new TimerTask() {
    @Override
    public void run() {
      depleteHunger();
      depleteThirst();
      depleteBodyTemperature();
    }
  }, 0, 5000);
}

3 个答案:

答案 0 :(得分:0)

您可以查看计时器的scheduleAtFixedRate

示例示例:

Timer timerObj = new Timer(true);
timerObj.scheduleAtFixedRate(timerTask, 0, interval));

此方法基本上可以实现您希望实现的目标:以特定间隔执行任务。 您需要通过覆盖TimerTask方法初始化run()对象并将逻辑置于其中(如您在代码中所提到的那样)。

答案 1 :(得分:0)

final int TICKS_PER_SECOND = 20;
final int TICK_TIME = 1000 / TICKS_PER_SECOND;

while (running) {
    final long startTime = System.currentTimeMillis();
    // some actions
    final long endTime = System.currentTimeMillis();
    final long diff = endTime - startTime;

    if (diff < TICK_TIME) {
        try {
            Thread.sleep(TICK_TIME - diff);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

答案 2 :(得分:0)

找到了解决方案。

public class HealthStatsTimer extends TimerTask {
  public void run() {
    Health.playerHealth.depleteHunger();
    Health.playerHealth.depleteThirst();
    Health.playerHealth.depleteBodyTemperature();
  }
}
//////////////////////
public static void main(String[] args){
  new Stranded();

  Timer timer = new Timer();
  timer.schedule(new HealthStatsTimer(), 5000, 5000);
}