java图像闪烁问题解决办法之双缓冲

这是在做java的一个小项目叫坦克大战的时候遇到的一个问题,就是使用线程进行repaint()面板的时候总是出现闪烁的问题,由于repaint()要把所有图像都重新绘制一遍,因此出现了闪烁。
 那么怎么解决闪烁这个问题呢,我们就用到了双缓冲这一技巧(double buffer),我们首先创建一张基于原面板的一场图像,先将绘制图像的工作在这张图片上面完成,最后再将这张图片直接贴到面板上面,这样就不用直接在面板上进行绘制,因此闪烁现象也就消失了。
	@Override

	//在repaint()调用paint()方法之前,还会先调用update()方法

	private Image offScreenImage;
	public void update(Graphics g) {//g是前面屏幕的画笔
		if(offScreenImage == null)
			offScreenImage = this.createImage(WIDTH,HEIGHT);
		Graphics gOffScreen = offScreenImage.getGraphics();//gOffScreen是背后屏幕的画笔
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.GREEN);
		gOffScreen.fillRect(0, 0, WIDTH,HEIGHT);//画矩形	
		gOffScreen.setColor(c);
		paint(gOffScreen);//在背后屏幕画
		g.drawImage(offScreenImage, 0, 0, null);//将背后屏幕画的贴在前面屏幕上
	}



 

猜你喜欢

转载自huyifan951124.iteye.com/blog/2315759