OK所以這裏是我的代碼:http://www.so.pastebin.com/Qca4ERmy的Java Applet緩衝圖像
我試圖使用緩衝區,這樣的小應用程序不會侵犯的重繪()閃爍但似乎我有麻煩。小程序仍然閃爍...
幫助?
謝謝。
我做了關於這個問題的一個快速的視頻:http://www.vimeo.com/12035196
OK所以這裏是我的代碼:http://www.so.pastebin.com/Qca4ERmy的Java Applet緩衝圖像
我試圖使用緩衝區,這樣的小應用程序不會侵犯的重繪()閃爍但似乎我有麻煩。小程序仍然閃爍...
幫助?
謝謝。
我做了關於這個問題的一個快速的視頻:http://www.vimeo.com/12035196
我做過的最好的方法是創建與您的小程序大小相同的另一個圖像,然後在繪圖/更新方法中將該圖像的內容複製到您的圖形對象。您必須確保在繪製到小程序時不會更新其他圖像,否則會導致閃爍。繪圖應該可能在另一個線程中完成,只是爲了使事情變得更容易理解。
我沒有訪問我的代碼,所以下面可能有點過(並且代碼可能不是最有效的):
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
您可以嘗試使用BufferedImage
來解決這個問題,這樣你只需創建一個BufferedImage
與您的幀兼容然後塊傳輸之前畫樣樣有整個圖像放到JFrame
的內容上。
更好的方法是使用BufferStrategy
類的自動緩衝,您可以閱讀關於它的教程here。
創建一個Swing小程序。 Swing默認是雙緩衝,所以你不應該有這個問題。從Swift教程How to Make Applets中的部分開始,瞭解創建Swing小程序的正確方法。
我嘗試添加createBufferStragtegy ..但我得到的是: C:\用戶\丹\文檔\ DanJavaGen \ tileGen.java:39:找不到符號 符號:方法createBufferStrategy(INT) location:class tileGen createBufferStrategy(2); 我有正確的進口... – nn2 2010-05-26 01:15:47