2016-03-30 72 views
0

我使用Graphics2D和Canvas類在java中創建遊戲。Java遊戲不會在第二臺顯示器上呈現

當我運行程序時,JFrame出現在我的第一臺顯示器上,沒有問題。然而,當我拖動JFrame的到我的第二個監視器它會變成灰色,並且將停止渲染什麼,然後當我拖回來到我的第一個監控程序繼續呈現..

我的遊戲循環調用draw()方法在我Screen類延伸Canvas,這是繪製方法。

public void draw(){ 
    BufferStrategy bs = getBufferStrategy(); 
    if(bs == null){ 
     createBufferStrategy(2); 
     bs = getBufferStrategy(); 
     g = (Graphics2D) bs.getDrawGraphics(); 
    } 

    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 

    g.setColor(Color.WHITE); 
    g.drawString("Hello, this works", 300, 300); 

    g.drawImage(ImageLoader.test[0][0], 100, 100, null); 

    bs.show(); 
} 
+0

http://stackoverflow.com/questions/4627553/show-jframe-in-a-specific-screen-in-dual-monitor-configuration,希望這有助於:) –

+0

不,這沒有幫助。這個代碼將JFrame放到了我的另一個屏幕上,但是如果我在屏幕上拖動它,它會再次中斷。我希望能夠在監視器之間拖動我的Jframe而不會中斷它。 –

+0

如果你把這種類型的腳本放入循環或事件中,我相信它會起作用 –

回答

1

不要將對Graphics(或Graphics2D)對象的引用超出方法的範圍。

移動g = (Graphics2D) bs.getDrawGraphics();以外的if塊。每次繪製時都需要獲取新圖形。

只要您完成繪圖,您還需要使用圖形的dispose

使用BufferStrategy有點複雜。我建議你看看BufferStrategy documentation中的示例代碼。特別是,您需要用渲染循環來檢查由BufferStrategy的contentsRestored()contentsLost()方法返回的值。

+0

謝謝,這也解決了我在遊戲每次調整大小時都會中斷的另一個問題。 –