【问题标题】:Increasing speed of Timer in Java提高Java中计时器的速度
【发布时间】:2013-05-20 02:20:19
【问题描述】:

我正在使用 Java 制作游戏,并且我目前正在为我的所有动画和游戏控件使用计时器。但是我无法选择正确的方法来提高计时器的速度。随着游戏的进行,我的游戏应该越来越快,我发现有很多方法可以提高我的对象的速度,但我不确定哪一种最有效。

例如,假设 int xpos 是增加对象 x​​position 的变量。

Timer timer = new Timer(100, new ActionListener()  //01
{                                                  //02
    public void actionPerformed(ActionEvent e)     //03
    {                                              //04
        xpos++;                                    //05
        repaint();                                 //06
    }                                              //07
}                                                  //08
                                                   //09
timer.start();                                     //10

为了提高速度,我可以将第 5 行的 xpos 增量增加到xpos+=2

我还可以通过将 Timer 的毫秒参数减小到第 1 行的 Timer timer = new Timer(50, new ActionListener() 来提高速度。

或者我可以添加第二个计时器来执行相同的任务以使计时器的速度加倍。基本上,我可以这样做:

Mover mover = new Mover();
Timer timer = new Timer(100, mover);        
Timer timer2 = new Timer(100, mover);
timer.start();
timer2.start();

class Mover implements ActionListener
{                                                  
    public void actionPerformed(ActionEvent e)     
    {                                              
        xpos++;                                    
        repaint();                                 
    }                                              
}   

你认为哪一个最有效?还是我应该结合所有这些技术?感谢您的任何回复。

【问题讨论】:

  • 采用第一种技术。不要使用 Timer 实例,只需让它们以正常的固定帧速率运行即可。
  • +1 用于将行号添加到代码的第一位。我认为这应该包含在 SO 代码格式中,或者只是一种必需的做法。
  • 在你的最后一个问题中,你说你增加的 y 间隔越多,你得到的闪烁就越多,所以这似乎意味着你减少了 Timer 间隔。
  • 感谢所有回复。我想我会尝试更多地增加我的 xpos 变量并减少 Timer 间隔。因为现在,我使用了很多 Timer 实例,它在很多方面都影响了我的游戏。

标签: java timer actionlistener increment repaint


【解决方案1】:
  • 保持定时器节拍稳定、不变。
  • 使用双精度或 Point2D.Double 存储您的逻辑位置和速度。
  • 不要依赖计时器间隔的准确性。
  • 根据速度和系统时间的变化计算位置变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2020-04-21
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多