当前位置: 首页 > 知识库问答 >
问题:

Java游戏不会在第二个监视器上呈现

况繁
2023-03-14

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

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

我的游戏循环调用我的screen类中的draw()方法,该类扩展了canvas,这是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();
}

共有1个答案

强承望
2023-03-14

不要保留对超出方法范围的Graphics(或Graphics2D)对象的引用。

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

你还需要处理的图形,一旦你完成绘制它。

使用BufferStrategy有点复杂。我建议您查看BufferStrategy文档中的示例代码。特别是,您需要使用循环来环绕呈现,这些循环检查由BufferStrategy的ContentsRestored()ContentsLoster()方法返回的值。

 类似资料:
  • 最后,正如你所看到的,我的游戏同时处理全屏模式和窗口模式。这两个问题都发生。

  • 我面临的问题是,我不能让这个循环的每个迭代之间的板得到呈现。我只得到这个循环的最终结果。 我试图在每次迭代之前创建一个thread.sleep(2*1000),以便给渲染系统时间来绘制我的板,但它工作了。 另一个解决办法是调用

  • 问题内容: 我的Java应用程序的摘录: 因此,它所做的就是使其自满屏。现在奇怪的是,该程序是全屏的,但只能在一台显示器上!例如,我有一个Windows Vista系统,其中两个屏幕组合在一个桌面上。如何自动让它在所有监视器上全屏显示? 好的,我尝试过: 但它给出: 例如,我希望能将2048x768的设备组合成一个设备(我单击“扩展桌面”)。 问题答案: 您可以尝试: 这应该计算多个屏幕的总宽度。

  • 这真的很烦人,还有人面对过这个问题吗?有解决办法吗?

  • 每当我打开我的android应用程序,它就会触发三星galaxy S8上的游戏模式/游戏启动器。但这个应用程序不是一个游戏。在以前的版本中,该应用程序使用opengl,如果使用opengl,三星似乎将应用程序视为游戏。我已经删除了opengl代码,但三星仍然将该应用程序视为游戏。奇怪的是,当我更改应用程序ID时,应用程序会正常启动。所以,我认为三星将application-id作为游戏存储在某个地

  • 问题内容: 我已经用Java创建了一个游戏,现在我只需要添加一个允许用户在60岁以下玩的计时器。我已经在互联网上进行搜索,找到了swing和util软件包的计时器。您能给我一种方法在我的游戏中使用它吗? 问题答案: 如果您想进行交互,可以使用和类: 因此,现在您有了一个计时器,可以触发另一个类的调用。现在,您可以安排它: