Java-апплет Буферизация изображений - PullRequest
1 голос
/ 26 мая 2010

ОК, вот мой код: http://www.so.pastebin.com/Qca4ERmy

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

Помощь

Спасибо.

Я сделал короткое видео об этой проблеме: http://www.vimeo.com/12035196

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

Создание апплета Swing. По умолчанию Swing имеет двойную буферизацию, поэтому у вас не должно быть этой проблемы. Начните с раздела из учебника Swing по Как сделать апплеты , чтобы узнать, как правильно создать апплет Swing.

2 голосов
/ 01 июня 2010

Лучший способ сделать это - создать другое изображение того же размера, что и ваш апплет, нарисовать его и затем в вашем методе рисования / обновления скопировать содержимое этого изображения в графический объект. Вы должны убедиться, что вы не обновляете другое изображение, когда рисуете в апплет, иначе это вызовет мерцание. Рисование, вероятно, должно быть сделано и в другом потоке, просто чтобы немного легче понять.

У меня нет доступа к моему коду, поэтому может быть немного не так (и код может быть не самым эффективным):

public class MyApplet extends Applet {

    Image offscreen;
    boolean pageFlipped = false;
    Thread drawingThread;

    public void init() {
        offscreen = createImage(this.getWidth(), this.getHeight());
        drawingThread = new Thread(new DrawingLoop());
        drawingThread.start();
    }

    public void update(Graphics g) {
        paint(g);
    }
    public void paint(Graphics g) {
        if (!pageFlipped) {
            g.drawImage(offscreen, 0, 0);
            pageFlipped = true;
        }
    }

    class DrawingLoop implements Runnable {
        public void run() {
            while (true) {
                Graphics g = offscreen.getGraphics();
                if (pageFlipped) {
                    // do your graphics code here
                    pageFlipped = false;
                }
            }
        }
    }
}

Надеюсь, это поможет!

1008 * Дан *

2 голосов
/ 26 мая 2010

Вы можете попытаться решить эту проблему, используя BufferedImage, таким образом, вы просто создаете BufferedImage, который совместим с вашей рамкой, и затем рисуете все там, прежде чем помещать все изображение в содержимое JFrame. .

Лучше всего использовать автоматическую буферизацию с классом BufferStrategy, вы можете прочитать об этом учебник здесь .

...