【问题标题】:How do i make my game not speed up/slow down depending on the fps in java?我如何使我的游戏不根据java中的fps加速/减速?
【发布时间】:2022-02-06 08:12:54
【问题描述】:

所以当我运行我正在开发的游戏时,FPS 会上下波动。但是游戏时间也是如此。更多的fps,更快的移动。更少的fps,更慢的移动。我正在使用延迟 10 毫秒的 javax.swing.Timer 类和个性化的 ActionListener 类。有谁知道如何摆脱这些时间难题?像 Unity 的 Time.deltaTime 这样的东西会很完美,因为我已经习惯了。

【问题讨论】:

  • 将“游戏时间”的概念与“fps”分离,这意味着您在每次迭代中跟踪“滴答”或“周期”,这决定了游戏中的事物如何变化,而不是与更新频率有关。在动画中,这通常称为“基于时间”而不是“基于增量”。这确实使它有点复杂,因为您需要记录事件的开始“滴答声”,并在每次交互时确定已经过去的时间量
  • FPS 应该只决定绘制的频率。听起来您将游戏逻辑与绘图一起放入 ActionListener 中。

标签: java time frame-rate


【解决方案1】:

ActionListener 课堂上记录时间:

class MyActionListener implements ActionListener {
    private long previousStartTime = -1;
    

    @Override
    public void actionPerformed(ActionEvent e) {
        long now = System.currentTimeMillis();
        long elapsedTime = previousStartTime != -1 ? now - previousStartTime : 0;
        previousStartTime = now;
        
        // use elapsedTime
        // e.g.
        double pixelsToMove = speedPerMs * elapsedTime;
    }
}

在第一次迭代中,elapsedTime 将为零。

【讨论】:

  • 除了帧/滴答声之间需要多长时间之外,这还能告诉我什么?
  • 它告诉您自上次更新以来经过了多少毫秒,以便您可以缩放移动。但也许我误解了这个问题?
  • 啊,那我可以把它乘以一堆东西并让它工作吗?
  • 我不熟悉 Unity,但我的目标是让 elapsedTime 与我想象的 deltaTime 一样。
  • 是的,它看起来有效,或者至少足够好,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多