java中的计时器,降低速度

时间:2012-04-19 00:45:05

标签: java swing timer swingx

我正在制作的节目是俄罗斯方块。我坚持的一个部分是当玩家达到一定分数时降低计时器的速度。例如,每200个点(模数将检查)将减少50个时间。最初时间从500毫秒开始。我无法弄清楚如何减少它,因为一旦我创建了Timer,传入的时间就不会改变。

**我的构造函数实例化计时器。

public PlayingPanel(SidePanel p)
{
  pf = new PlayingField(p);
  generateNewPiece(); 
  setFocusable(true);
  addKeyListener(new KeyEvent());
  timer = new Timer(time, new BlockListener());
  timer.start();   
}

public void startTimer()
{
  time -= 20;
}

/**
 * generates new piece
 */
public void generateNewPiece()
{
  startTimer();
  ...
}

4 个答案:

答案 0 :(得分:3)

Timer.setDelay(int ms)

  

设置Timer的事件间延迟,即连续动作事件之间的毫秒数。这不会影响初始延迟属性,可以通过setInitialDelay方法设置。

答案 1 :(得分:2)

默认情况下,javax.swing.Timer合并事件;你可能会看到这种效果。您可以自动定制动画,如here所示,以确认您没有超过最高速度(最短时间段)的可用动画预算。

答案 2 :(得分:0)

计时器对象永远不会对时间变量进行更改。您可以取消当前计时器并创建一个新计时器,以-20作为参数,并使用新计时器更新您的事件。我的Swing Java-fu很弱,但在1.6中,您可以调用setDelay以新的时间更新现有的计时器,单位为ms。

答案 3 :(得分:0)

你可以创建一个类,比如GameTimer来处理所有基于时间的事件。 GameTimer会将自己注册到Timer,或者使用您选择的任何时间测量方法。然后,您的其他对象可以将自己注册到GameTimer(可能具有所需的频率),GameTimer将相应地通知他们。这样你就可以从Timer中抽象出来,这通常是一个好主意,你可以更好地控制基于时间的事件的处理方式。如果GameTimer注册到一个计时器并告诉它在10ms更新,这应该足够精确到高达100fps。然后,您可以让GameTimer通知BlockListener,无论您想要什么样的度量。

这也意味着如果您找到更好的方法来衡量时间,您就不必在多个地方更改代码。