我使用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();
}
答案 0 :(得分:1)
不要在方法范围之外保留对Graphics(或Graphics2D)对象的引用。
将g = (Graphics2D) bs.getDrawGraphics();
移到if块之外。每次绘图时都需要获得一个新的图形。
完成绘图后,您还需要dispose图形。
使用BufferStrategy有点复杂。我建议您查看BufferStrategy documentation中的示例代码。特别是,您需要使用循环来围绕渲染,这些循环会检查BufferStrategy的contentsRestored()
和contentsLost()
方法返回的值。