这是在做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);//将背后屏幕画的贴在前面屏幕上
}
本文介绍了一种在Java游戏开发中解决闪烁问题的方法——双缓冲技术。通过预先在一张图像上绘制所有元素,然后一次性将该图像绘制到屏幕上,有效避免了因频繁重绘造成的画面闪烁。
495

被折叠的 条评论
为什么被折叠?



