public class Screen extends Canvas{
private BufferedImage image;
private int height = Toolkit.getDefaultToolkit().getScreenSize().height-37;
private int width = Toolkit.getDefaultToolkit().getScreenSize().width;
private boolean running = false;
public Screen(){
setSize(width, height);
try {image = ImageIO.read(new File("success.jpg"));}
catch (Exception e) {Utilities.showErrorMessage(this, e);}
setVisible(true);
running = true;
}
public void paint(Graphics g){
while(running){
BufferStrategy bs = getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
g = bs.getDrawGraphics();
g.drawImage(image,0,0,width,height, null);
g.dispose();
bs.show();
}
}
}
这是我的Game JFrame中的一个初始显示屏幕,在开始游戏时添加。代码运行良好,但添加画布后,我似乎无法通过正常手段退出程序。(退出按钮)它在菜单中工作得很好,是的,我确实在JFrame中设置了defaultCloseOperation。你知道为什么会这样吗?
这个…
public void paint(Graphics g){
while(running){
BufferStrategy bs = getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
g = bs.getDrawGraphics();
g.drawImage(image,0,0,width,height, null);
g.dispose();
bs.show();
}
}
不是自定义绘画应该做的。基本上这是阻塞事件队列,这意味着,除了能够响应新的绘制事件,它阻止它处理任何新的事件。
在这种情况下,最好创建一个单独的Thread
,并在Thread
的run
方法中执行此操作。
查看在AWT和Swing中绘画了解更多细节