我可以从谷歌搜索中看到这个问题被问了很多,但我找到的解决方案都没有为我做这件事。你知道,我正在用 Java 制作一个带有图像的游戏,因为游戏通常都有这些东西。但是整个表格一直在闪烁,我无法让它停止。是的,我已经对其进行了双重缓冲并覆盖了 update() 方法,虽然这确实有帮助,但闪烁仍然存在。我不知道我是否对双缓冲做错了,或者我是否需要完全不同的东西。
起初我以为它可能与 clearRect() 行有关,但删除它后,游戏仍然闪烁,但当然不是每次都清除。所以这根本没有帮助。减慢计时器后,闪烁确实几乎完全消失了,但我需要将其减慢到 100 毫秒,即使那样我仍然会出现一些闪烁。此外,这对游戏来说太慢了。我尝试让一个计时器在 10 毫秒计时器上完成所有工作,另外一个计时器在 100 毫秒进行绘画,但它看起来很跳跃。我可以将绘画计时器减慢到大约 30 毫秒,并且它仍然很流畅,尽管闪烁仍然是一个问题。
必须有一种方法可以每 10-30 毫秒执行一次而不会闪烁。是否有其他类似于双缓冲但在这种情况下更好的方法,或者我可以使用的方法?提前感谢您的帮助。
public class main extends JApplet implements ActionListener {
//This Declares The Variables
Graphics2D buffer;
Image offscreen;
Timer timGame = new Timer(10, this);
//other variables
public void init(){
//This Creates The Offscreen Buffer Zone
offscreen = createImage(getSize().width, getSize().height);
buffer = (Graphics2D)offscreen.getGraphics();
//other initialization stuff irrelevant to drawing
}
public void actionPerformed(ActionEvent evt){
if (evt.getSource() == timGame)
runGame();
}
private void runGame(){
//Do stuff, move objects
repaint();
}
public void paint(Graphics g){
super.paint(g);
buffer.clearRect(0, 0, getSize().width, getSize().height);
//draw stuff to buffer
g.drawImage(offscreen, 0, 0, this);
}
public void update(Graphics gr){
paint(gr);
}