2014-09-23 27 views
0

在我的程序中,我正在使用Swing窗口作爲我的GUI,並且我知道我應該使用repaint和paintComponent方法渲染swing組件。我還有幾個需要在主窗口內呈現的自定義類對象。爲了理解,我的程序是一個遊戲,其移動物體需要每秒渲染60次。擺動渲染......它總是必須重繪()和paintComponent()?

在一個遊戲開發教程中,我看了一下,這個人在畫布上使用了Jframe,但他沒有使用paintComponent方法。他只是用自己的render()方法繪製所有使用從創建bufferStrategy獲得的圖形上下文的圖形。

所以,如果這是可行的(爲什麼),爲什麼大家都說使用paintComponent方法,它們之間的區別究竟是什麼?

如果我要使用paintComponent的方式做事,我將如何使用bufferStrategy?

+0

是的,我更熟悉Swing比AWT。 Canvas的用途是什麼? – zephos2014 2014-09-23 00:26:51

+0

您是指從Canvas?那麼Canavs擴展了JPanel? – zephos2014 2014-09-23 00:30:28

+1

忽略我,聽@MadProgrammer .. – 2014-09-23 00:32:23

回答

3

在一個遊戲開發教程中,我看了一下,這個傢伙用Canvas使用Jframe,但他沒有使用paintComponent方法。他只是用自己的render()方法繪製所有使用從創建bufferStrategy獲得的圖形上下文的圖形。

Canvas是AWT組件,使用BufferStrategy,你接管噴漆工藝,併成爲負責更新Graphics背景和調度它推到硬件/屏幕。

這就是通常所說的「主動繪畫」,因爲你不斷地(以不變的幀率假設),更新緩衝區。

Swing使用被動塗料工藝,所以你永遠不知道何時可能發生塗料工藝。 Swing有自己的機制來確定什麼應該重繪和何時。使用repaint,您向這些機制請求您的組件被重新繪製,但不能保證因爲此組件而啓動繪畫循環。

如果您爲繪畫使用任何Swing組件,則必須使用repaintpaintComponent,因爲Swing負責提供您可以繪製的上下文。

如果你想使用Canvas,那麼你可以使用BufferStrategy來代替。

實質上,它們是不同的繪畫方法。請記住,如果你使用BufferStrategy,你會失去所有的Swing API,你不能使用這種方法的Swing組件,因爲它們不是用這種方式工作的......

+0

嗯...有沒有一個很好的替代BufferStrategy是揮杆兼容?我非常喜歡Swing組件,但我需要不斷繪製可能會減慢我的圖形速度的圖像。 – zephos2014 2014-09-23 00:35:10

+0

@ zephos2014不,但除非你有一個無法在Swing中解決的ABSOLUTE問題,否則可能幾乎不需要擔心... – MadProgrammer 2014-09-23 00:56:36

+0

您是否推斷BufferStrategy不是必需的?我不知道揮杆如何決定畫東西,所以我不知道。我認爲最好使用BufferStrategy的原因是我會有動畫。擺動處理動畫的好嗎? – zephos2014 2014-09-23 00:58:38

相關問題