Почему JFrame начинает лагать после того, как фрейм открыт на некоторое время? - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь разработать игру с нуля.Я делаю сетку для хранения разных персонажей, а затем другой класс отображает эти символы.Проблема, с которой я сталкиваюсь, заключается в том, что JFrame начинает отставать.Сначала персонаж отзывчив, но начинает быстро отставать.Отставание становится все хуже и хуже, когда программа остается открытой.

Я понятия не имею, с чего начать, чтобы решить эту проблему.

package game;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class runner extends JPanel {

    static MyKeyListener list;
    static player play;
    static grid gameGrid;
    static int size = 600;

    public runner() {
        MyKeyListener listener = new MyKeyListener(this);

        player one = new player(5, 4);
        grid Grid = new grid(10, 10, size, one);
        play = one;
        gameGrid = Grid;
        list = listener;
        this.addKeyListener(listener);
        setFocusable(true);
    }

    public static void main(String[] args) {
        runner runn = new runner();
        JFrame frame = new JFrame("game");
        int frameSize = size + (size / 2);
        frame.setSize(size, size);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(runn);
        frame.addKeyListener(list);
        boolean isRunning = true;
        while (isRunning) {
            drawingComponent DC = gameGrid.update();
            if (list.getDir() == 1) {
                gameGrid.moveUp(play, play.getX(), play.getY());
                list.setDir(0);
            }
            if (list.getDir() == 2) {
                gameGrid.moveDown(play, play.getX(), play.getY());
                list.setDir(0);
            }
            if (list.getDir() == 3) {
                gameGrid.moveLeft(play, play.getX(), play.getY());
                list.setDir(0);
            }
            if (list.getDir() == 4) {
                gameGrid.moveRight(play, play.getX(), play.getY());
                list.setDir(0);
            }
            frame.add(DC);
            frame.revalidate();
            frame.repaint();
        }
    }

    public player getPlayer() {
        return play;
    }
}
...