Как я могу очистить экран моего кадра в Java? - PullRequest
2 голосов
/ 24 декабря 2009

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

Есть ли способ напрямую очистить экран от кадров без каких-либо событий?

Ответы [ 3 ]

3 голосов
/ 24 декабря 2009

Вы должны переопределить

public void paint(Graphics g)

и делай все свои рисунки там.

Затем вы запускаете таймер, который вызывает

repaint();

Вот базовый пример:

public class MainFrame extends JFrame {

    int x = -1;
    int inc;

    public MainFrame() {
        Timer timer = new Timer(10, new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                MainFrame.this.repaint();
            }
        });
        timer.start();
    }

    public void paint(Graphics g) {
        // don't call super.paint(g), we do all the painting

        if(x > getWidth()) inc = -5;
        if(x < 0) inc = 5;

        x += inc;

        // here we clear everything
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(Color.BLUE);
        g.drawLine(x, 0, getWidth()-x, getHeight());
    }

    public static void main(String[] args) {
        MainFrame mainFrame = new MainFrame();
        mainFrame.setSize(800, 600);
        mainFrame.setVisible(true);
    }
}
1 голос
/ 24 декабря 2009

Делайте то, что предложил Питер, но переопределяйте компонент краски вместо краски .

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

0 голосов
/ 24 декабря 2009

Если вы хотите, чтобы что-то происходило каждые X миллисекунд, вы можете использовать javax.swing.Timer , который принимает ActionListener. Что касается самого действия по очистке, первое, что приходит на ум, это Graphics.clearRect () , но я подозреваю, что может быть лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...