Я делаю 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();
}
Я также читал, что таймер лучше заменить на ScheduledExecutorService
и что использование sleep()
может вызвать смещение и не очень гибко.