簡體   English   中英

Java Applet緩沖映像

[英]Java Applet Buffering images

好的,所以這是我的代碼: http : //www.so.pastebin.com/Qca4ERmy

我正在嘗試使用緩沖區,因此applet在redraw()時不會閃爍,但是似乎我遇到了麻煩。 小程序仍然閃爍。

救命?

謝謝。

我制作了有關此問題的快速視頻: http : //www.vimeo.com/12035196

創建一個Swing applet。 默認情況下,Swing是雙緩沖的,因此您應該不會遇到此問題。 從Swing教程中有關如何制作Applet的部分開始,以了解創建Swing Applet的正確方法。

您可以嘗試使用BufferedImage解決此問題,以這種方式,您只需創建一個與框架兼容的BufferedImage ,然后在將整個圖像拖到JFrame的內容上之前在其中繪制所有內容。

更好的方法是對BufferStrategy類使用自動緩沖,您可以在此處閱讀有關它的教程。

我做過的最好方法是創建另一個與小程序大小相同的圖像,然后繪制到該圖像上,然后在paint / update方法中將該圖像的內容復制到圖形對象中。 您必須確保在繪制到Applet時未更新其他圖像,否則會導致閃爍。 繪制可能也應該在另一個線程中完成,只是為了使事情更容易理解。

我無權訪問我的代碼,因此以下內容可能會有點過時(並且代碼可能不是最有效的):

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

希望這可以幫助!

-擔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM