1

OK、これが私のコードです:http: //www.so.pastebin.com/Qca4ERmy

redraw()時にアプレットがちらつかないようにバッファを使用しようとしていますが、問題が発生しているようです。アプレットはまだちらつきます....

ヘルプ?

ありがとうございました。

私はこの問題について簡単なビデオを作りました:http ://www.vimeo.com/12035196

4

3 に答える 3

3

Swing アプレットを作成します。Swing はデフォルトでダブル バッファリングされるため、この問題は発生しません。Swing アプレットを作成する適切な方法については、アプレットの作成方法に関する Swing チュートリアルのセクションから始めてください。

于 2010-05-26T00:26:38.857 に答える
2

私が行った最善の方法は、アプレットと同じサイズの別の画像を作成し、それに描画してから、ペイント/更新メソッドでその画像の内容をグラフィック オブジェクトにコピーすることです。アプレットに描画するときに他の画像を更新していないことを確認する必要があります。そうしないと、ちらつきが発生します。描画は、おそらく別のスレッドでも行う必要があります。これは、物事を少し理解しやすくするためです。

私は自分のコードにアクセスできないため、以下は少しずれている可能性があります (コードは最も効率的ではない可能性があります)。

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;
                }
            }
        }
    }
}

お役に立てれば!

-ダン

于 2010-06-01T12:37:09.227 に答える
2

を使用してこの問題の解決を試みることができBufferedImageます。この方法BufferedImageでは、フレームと互換性のある を作成し、そこにすべてを描画してから、画像全体をJFrameのコンテンツにブリットします。

より良いアプローチは、クラスで自動バッファリングを使用することです。これに関するチュートリアルはこちらでBufferStrategy読むことができます。

于 2010-05-26T00:14:06.073 に答える