【问题标题】:Java game won't render on second monitorJava 游戏不会在第二个显示器上呈现
【发布时间】:2016-07-19 00:48:29
【问题描述】:

我正在使用 Graphics2D 和 Canvas 类在 java 中创建游戏。

当我运行程序时,我的第一台显示器上会出现一个 JFrame,并且没有任何问题。但是,当我将 JFrame 拖到我的第二个监视器上时,它会变成灰色并停止渲染任何内容,然后当我将它拖回我的第一个监视器上时,程序会继续渲染..

我的游戏循环在扩展CanvasScreen 类中调用draw() 方法,这是draw 方法。

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();
}

【问题讨论】:

  • stackoverflow.com/questions/4627553/… ,希望这会有所帮助:)
  • 不,这没有帮助。其中的代码将 JFrame 放到我的另一个屏幕上,但如果我将它拖过屏幕,它会再次中断。我希望能够在显示器之间拖动我的 Jframe 而不会损坏。
  • 如果你把这种类型的脚本放在一个循环或事件中,我相信它会起作用

标签: java awt game-engine graphics2d


【解决方案1】:

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

g = (Graphics2D) bs.getDrawGraphics(); 移到 if 块之外。每次绘制都需要获取一个新的Graphics。

您还需要在图形上完成绘图后立即dispose

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

【讨论】:

  • 谢谢,这也解决了我遇到的另一个问题,即每次调整大小时游戏似乎都会中断。
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2015-02-02
  • 2012-06-17
  • 2017-12-06
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多