2013-01-25 74 views
1

我有一個Canvasjava.awt包添加到JFrameCanvas使用雙緩衝繪製,使用canvas.createBufferStrategy(2)啓用。Java Canvas不規則繪圖時間?

這是我的render()方法,這應該是相當快的,因爲我不畫了這麼多:

Graphics g = strategy.getDrawGraphics(); 

// draw 
g.drawImage(...); // Image with a size of 1000x1000 
g.drawString(...); // Drawing a short String with the Frames per Second 
drawModel(g); // this method draws a rotated game character with the 
       // help of Gaphics2D (Imagesize: 100x100) 

g.dispose(); 
strategy.show(); 

我測量與System.currentTimeMillis的()的幫助下,性能和我得到的結果(每幀時間):

  • 9ms的
  • 9ms的
  • 11毫秒
  • 10ms的
  • 0毫秒
  • 21ms
  • 10ms的

如何可以在發生一個渲染過程花費0毫秒和的平均時間在未來的雙?你有什麼建議來提高整體渲染性能?

// UPDATE

我已經嘗試了JPanel現在:它的燃燒和它比帆布慢得多。

+4

1)不要混用Swing和AWT組件。使用'JPanel'或'BufferedImage'作爲繪圖表面。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+3

什麼是您的平臺的時鐘分辨率? – trashgod

+0

@trashgod好問題。 –

回答

1

System.currentTimeMillis()經常不會比10ms更準確。試試System.nanoTime()

+0

我已經改變了它,它更精確,但是在一毫秒上舍入,它在我的情況下大部分與'System.currentTimeMillis()'相同。無論如何,謝謝你從現在開始使用'System.nanoTime()'。 –

+0

@LeeheLee「在一毫秒內舍入它在我的情況下大部分與System.currentTimeMillis()相同」這很奇怪。在過去,我發現System.nanoTime更加準確。注意線程切換,不必要的內存分配(和相應的垃圾收集)以及不可預測的事情。 – Boann