2016-03-30 48 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

谢谢,这也解决了我在游戏每次调整大小时都会中断的另一个问题。 –