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);//将背后屏幕画的贴在前面屏幕上
	}



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值