Java游戏不会在第二台显示器上呈现

时间:2016-03-30 20:01:11

标签: java awt game-engine graphics2d

我使用Graphics2D和Canvas类在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();
}

1 个答案:

答案 0 :(得分:1)

不要在方法范围之外保留对Graphics(或Graphics2D)对象的引用。

g = (Graphics2D) bs.getDrawGraphics();移到if块之外。每次绘图时都需要获得一个新的图形。

完成绘图后,您还需要dispose图形。

使用BufferStrategy有点复杂。我建议您查看BufferStrategy documentation中的示例代码。特别是,您需要使用循环来围绕渲染,这些循环会检查BufferStrategy的contentsRestored()contentsLost()方法返回的值。