在下面,我的代碼是用來製作可再生圖形的代碼,用於顯示生活遊戲本身。更新圖形時jframe閃存
public paint(Graphics g)
{
g.setClip();//Set
g.setColor(Color.BLACK);
Processing.....
while(true)
{
g.clearRect();//Clear
g.drawLine(); //Draw;
Calling SwingWorking to prepare next statement
}
}
看起來像這樣做很愚蠢,因爲在運行它時,幀會一直閃爍而且遲緩。 我嘗試使用Thread.sleep()
,但它只是減慢閃光頻率。
所以,我的問題是如何做得好,避免閃爍。 我沒有提到的代碼部分都是關於實例變量的數據處理,如果您需要它,請注意我,非常感謝您的幫助。
感謝,@MadProgrammer
這裏是我得到了什麼, 首先,閃存是因爲當程序調用重繪()和paint(),它花費太多時間,使動畫順利,在這種情況是clearRect()和drawLine()。
我將使用雙緩衝來解決它。
更新,
謝謝你們,我讀那些例子。我只是使用一個沒有任何緩衝區方法的框架來顯示圖形,這是一個錯誤。我使用了bufferStrategy來解決它。
'JFrame'沒有雙緩衝,所以我不會騎它是'塗料'的方法。 – MadProgrammer
考慮提供一個[runnable示例](https://stackoverflow.com/help/mcve),它可以說明您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的響應 – MadProgrammer
基於單一的,不在上下文的代碼片段,我建議您首先查看[在AWT和Swing中繪製](http://www.oracle.com/) technetwork/java/painting-140037.html),[Performing Custom Painting](http://docs.oracle.com/javase/tutorial/uiswing/painting/),[Swing中的併發](http://docs.oracle.com .com/javase/tutorial/uiswing/concurrency /)和[如何使用Swing Timers](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)瞭解一些可能的原因問題和可能的解決方案 – MadProgrammer