清理我的延迟计时器

时间:2014-02-10 19:38:40

标签: java timer refactoring awt

我制作了一个游戏,你是一个围绕屏幕移动的圆圈,当它们在屏幕上产生时会闪避其他圆圈。我有一个延迟计时器,在某个时间产生一个敌人,但它不是很好的编码,因为我是Java的新手。如果有人能够对代码进行整理或提供更好的建议,我会非常感激。

注意:spawnTime是一个设置为System.currentTimeMillis()的long,timesDelay是一个设置为1.0的double,spawnRateCounter是一个设置为0的int。此外,这个代码正在一个awt Timer中运行,所以它再次运行再一次。

private final double delayRateChange = .75;

private void spawnEnemy() {
    Random r = new Random();
    if (System.currentTimeMillis() - spawnTime > (1000 * timesDelay)){
        spawnRateCounter++;
        if (spawnRateCounter == 5){
            timesDelay*=delayRateChange;
            spawnRateCounter = 0;
        }
        enemies.add(new Enemy(r.nextInt(500), r.nextInt(500),
                r.nextInt(4), r.nextInt(4) + 1, r.nextInt(3)));
        spawnTime = System.currentTimeMillis();
    }
}

1 个答案:

答案 0 :(得分:0)

关于我在这里唯一的评论是,每次调用该方法时,你都在“构建”随机。

通常我所做的是将Random添加到utils类中的内容:

public class Utils () {
   private static Random random;

   private Utils(){}  //Only static methods

   public static final Random getRandom() {
       if(random == null) random = new Random();
       return random;
   }

   public static final seedRandom(long seed) {
       random = new Random(seed);
   } 

然后在您的代码中,您将替换:

Random r = new Random();

Random r = Utils.getRandom();