Java Delta Time вызывает резкое движение - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь вычислить дельта-время, чтобы плавно перемещать круг по экрану независимо от частоты кадров.Когда я запускаю свой код, кружок дергается, что означает, что дельта-время не рассчитывается правильно, но я не могу найти ошибку в моих вычислениях.Вот код

Основной класс

import javax.swing.JFrame;

public class Main {

    public static long lastTime;
    public static double deltaTime;

    public static void main(String[] args) {
        lastTime = 0;

        //Setting up the JFrame
        JFrame frame = new JFrame("Test");
        frame.setSize(600, 400);
        frame.add(new PanelP());        
        frame.setVisible(true);

        //Loop
        while(true) {
            //Calculate DeltaTime
            deltaTime = (lastTime - (lastTime = System.nanoTime())) / -1000000.0;
            //Draw Frame
            frame.repaint();
        }
    }

}

И Панель класса

import java.awt.Graphics;

import javax.swing.JPanel;

public class PanelP extends JPanel{

    private float x;

    public PanelP() {
        super();
    }

    @Override
    public void paintComponent(Graphics g) {

        //Move circle
        x += (10 * (float)Main.deltaTime);

        //Draw Circle
        g.drawOval(Math.round(x), 50, 30, 30);
    }
}

1 Ответ

0 голосов
/ 20 мая 2018
  1. lastTime = 0;, вероятно, ошибка, поэтому я бы ее исправил.Вместо этого инициализируйте его с помощью System.nanoTime().

  2. Вы также обновляете данные настолько быстро, насколько это возможно.Я бы использовал SwingTimer или даже Tread.sleep(), чтобы замедлить процесс, чтобы на экране было время для отображения.Попробуйте запустить 20 раз в секунду.

...