2010-05-25 92 views

回答

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

希望這有助於!

-Dan

2

您可以嘗試使用BufferedImage來解決這個問題,這樣你只需創建一個BufferedImage與您的幀兼容然後塊傳輸之前畫樣樣有整個圖像放到JFrame的內容上。

更好的方法是使用BufferStrategy類的自動緩衝,您可以閱讀關於它的教程here

+0

我嘗試添加createBufferStragtegy ..但我得到的是: C:\用戶\丹\文檔\ DanJavaGen \ tileGen.java:39:找不到符號 符號:方法createBufferStrategy(INT) location:class tileGen createBufferStrategy(2); 我有正確的進口... – nn2 2010-05-26 01:15:47

3

創建一個Swing小程序。 Swing默認是雙緩衝,所以你不應該有這個問題。從Swift教程How to Make Applets中的部分開始,瞭解創建Swing小程序的正確方法。

+0

不正確。我只是把我的applet變成了一個JApplet,它仍然可以做到。 – nn2 2010-05-26 02:48:02

+0

那麼,你有一個編碼問題的地方。例如,爲什麼每次繪製屏幕時都要讀取文件? – camickr 2010-05-26 03:40:04