2011-10-11 18 views
1

我使用Java創建一個簡單的2D遊戲。到目前爲止,我只用C++完成了這個工作。在Java中,我通過擴展JFrame和調用this.getContentPane().getGraphics()得到一個Graphics對象。有了這個對象,我將所有的東西都畫到了屏幕上,每一幀。這就提出了幾個問題:Java的後備緩衝和動畫

  1. 後備緩衝:我沒有得到任何閃爍的效果,而我沒有使用後備緩衝(我直接在Graphics對象上圖)。爲什麼是這樣? java有一個內置的backbuffer或什麼的?

  2. 動畫:我已經習慣了把所有動畫部件在一個單一的精靈表,就像這個例子: http://www.envygames.com/share/sample_animation.jpg

現在,有人告訴我,你可以只畫.gif動畫的而java將繪製這些獨立於遊戲循環。我已經試過了,它似乎並沒有工作。這是真的還是我也應該在java中使用這些精靈表單?

感謝

回答

3

是,Java有一個雙緩衝的渲染策略,可以開啓和關閉...

Java: how to do double-buffering in Swing?

關於GIF動畫,我認爲這是對的,但你可能必須將它們放在適當的容器中(可能是JLabel的圖標?)。

2
getting a Graphics object by extending JFrame and 
calling this.getContentPane().getGraphics(). 

不直接畫到JFrameCustom Painting,你必須尋找JLabel,允許書畫樣樣,另一個的choise會在你有秋千繪畫擴展JCompoments,或JPanel

尋找paintComponent(Graphics g)而不是paint(Graphics g),因爲這個方法在很多時候都用在例子中,並且在一些Java ExamplesDepots上有所不同,這是錯誤的方法,可能缺少

+0

paint()和paint成分,它()是對的paintComponent()的paintBorder()和paintChildren(),所以第一個的默認實現委託如果運算的框架是無國界的,而不是用作擺動容器,沒有什麼錯誤使用它 – fortran