Control RateOfFire(Java GameDev)

时间:2013-08-10 15:49:27

标签: java

我目前正在从头开始在Java中编写一个简单的2D游戏(用于学习目的)

我想控制玩家可以射击的速度。这里完成的方法有效,但可以改进。如果用户按下/按住鼠标左键,则调用该方法。它在用户按下按钮时起作用,但是当他/她释放鼠标按钮时,等待(然后是rateOfFire时间)并尝试拍摄它可能会也可能不会起作用,因为roftC值不会更新时球员不射门。 然后我尝试将它放入我的update()方法(每秒调用60次)。问题依然存在。我真的不知道如何解决这个问题。这是我的代码:

/**
 * Used to control the rate of fire
 */
private int roftC = 0;
/**
 * Shoot a Projectile
 */
protected void shoot(int x, int y, double dir) {
        Projectile p = new Bomb(x, y, dir);
        if (roftC % p.getRateOfFire() == 0) {
            level.addProjectile(p);
        }
        if (roftC > 6000) {
            roftC = 0;
        }
        roftC++; // Whether it is here or down there doesn' t make a diffrence
}


 /**
  * 
  */
  @Override
  public void update() {
      // roftC++;
    }

1 个答案:

答案 0 :(得分:2)

一个想法是在镜头之间引入最小延迟。像这样:

static final long MINIMUM_DELAY = 1000/30; // So we can have 30 shots per second
long lastShotTimestamp;

protected void shoot(int x, int y, double dir) {
    long now = System.currentTimeMillis();

    if (now - lastShotTimestamp > MINIMUM_DELAY) {
        level.addProjectile(new Bomb(x, y, dir));
        lastShotTimestamp = now;
    }
}

这种方法实际上接近物理学 - 枪需要一些时间在连续拍摄之间重新加载。