射击技工延迟

时间:2018-10-14 16:12:34

标签: java scheduled-tasks mouseevent delay timertask

我正在制作一个Java游戏,想添加一个射击技师,如果用户单击它,将立即射​​击子弹,但如果按住它,它将以连续速率射击子弹。我可以通过使用Timer并以固定的速率安排任务来部分实现此目标,但是如果用户再次单击该位置,它将立即拍摄,从而无法达到固定速率延迟的目的。

这是我到目前为止所拥有的:

private Game game;
private Timer timer = new Timer();

@Override
 public void mousePressed(MouseEvent e) {
    this.timer = new Timer();
    this.timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            for(int i = 0; i < game.playerGun.getBulletsPerShot(); i ++) {
                try {
                    game.shoot();
                    TimeUnit.MILLISECONDS.sleep((long) (game.playerGun.getDelayBetweenEachBullet() * 1000) );
                } catch (IOException | InterruptedException e1) {
                e1.printStackTrace();
                }
            }
        }

    }, (long)game.playerGun.getDelayBetweenEachShot() * 1000, (long) (game.playerGun.getDelayBetweenEachShot() * 1000));

}

@Override
public void mouseReleased(MouseEvent e) {
    this.timer.cancel();
}

我还读到Timer最好用ScheduledExecutorService代替,而使用sleep()则可能会引起漂移,而且不太灵活。

0 个答案:

没有答案