在Java中,需要调用paint()方法将你所想要的东西画在你自己定义好的LaunchFrame()里面。但是如果每一次都立刻将Paint()方法里面的东西画到LaunchFrame()上,由于每一块显卡承受刷新频率的能力强弱不一样,所以很容易就出现了闪烁现象,现记录一种我最开始学习解决游戏闪烁现象的初级解决方案-----------双缓冲技术。
Java中可以利用repaint()方法进行游戏数据修改之后的重画,底层还需经过调用update(),所以我们可以重写update()方法来实现双缓冲技术,代码如下:
public void update(Graphics g) {
if (offScreenImage == null) {
offScreenImage = this.createImage(GAME_WIDTH, GAME_HIGHT);
}
Graphics goffScreen = offScreenImage.getGraphics();// 重新定义一个画虚拟桌布的画笔//
Color c = goffScreen.getColor();
goffScreen.setColor(Color.darkGray);
goffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HIGHT);
goffScreen.setColor(c);
paint(goffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
paint()方法中传的画笔是goffScreen,再调用paint()方法将画在goffScreen的东西全部显示出来。
开一个线程,Sleep一段时间执行repaint()方法 private class PaintThread implements Runnable {
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这样就可以消除一些初级的闪烁现象。