【问题标题】:Timer in java, decreasing speedjava中的计时器,降低速度
【发布时间】:2012-04-30 11:58:16
【问题描述】:

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

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

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();
  ...
}

【问题讨论】:

    标签: java swing timer swingx


    【解决方案1】:

    Timer.setDelay(int ms)

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

    【讨论】:

    • 请原谅,我刚刚添加了最新的 Java Doc for 1.7 以指向链接 :-)
    【解决方案2】:

    默认情况下,javax.swing.Timer合并事件;您可能会看到这种效果。您可以对动画进行自定时,如 here 所示,以验证您在最高速度(最短周期)下没有超出可用动画预算。

    【讨论】:

    • 我还是个初学者,但我想做的只是更新时间。我似乎无法弄清楚如何更新它。我可以更改它的值,但我不能让它进入 Timer 对象以降低速度。
    • 这个example 使用setDelay() 来改变速度,正如@Greg Kopf 所建议的那样。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-25
        • 2022-08-06
        • 2016-09-25
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2022-09-25
        • 1970-01-01
        相关资源
        最近更新 更多