Java 游戏无法在第二台显示器上呈现
Java game won't render on second monitor
我正在 java 使用 Graphics2D 和 Canvas class 创建游戏。
当我 运行 程序时,JFrame 出现在我的第一台显示器上,没有任何问题。但是,当我将 JFrame 拖到我的第二台显示器上时,它会变成灰色并停止渲染任何内容,然后当我将它拖回我的第一台显示器时,程序会继续渲染..
我的游戏循环在我的 Screen
class 中调用一个 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();
}
不要在您的方法范围之外保留对 Graphics(或 Graphics2D)对象的引用。
将 g = (Graphics2D) bs.getDrawGraphics();
移到您的 if 块之外。每次绘制都需要获取一个新的Graphics。
您还需要在完成绘图后立即 dispose 图形。
使用 BufferStrategy 有点复杂。我建议您查看 BufferStrategy documentation 中的示例代码。特别是,您需要用循环包围渲染,这些循环检查 BufferStrategy 的 contentsRestored()
和 contentsLost()
方法返回的值。
我正在 java 使用 Graphics2D 和 Canvas class 创建游戏。
当我 运行 程序时,JFrame 出现在我的第一台显示器上,没有任何问题。但是,当我将 JFrame 拖到我的第二台显示器上时,它会变成灰色并停止渲染任何内容,然后当我将它拖回我的第一台显示器时,程序会继续渲染..
我的游戏循环在我的 Screen
class 中调用一个 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();
}
不要在您的方法范围之外保留对 Graphics(或 Graphics2D)对象的引用。
将 g = (Graphics2D) bs.getDrawGraphics();
移到您的 if 块之外。每次绘制都需要获取一个新的Graphics。
您还需要在完成绘图后立即 dispose 图形。
使用 BufferStrategy 有点复杂。我建议您查看 BufferStrategy documentation 中的示例代码。特别是,您需要用循环包围渲染,这些循环检查 BufferStrategy 的 contentsRestored()
和 contentsLost()
方法返回的值。