Java图像闪烁
我可以从谷歌搜索中看到,这个问题被问了很多次,但我发现没有一个解决方案适合我。我正在用Java制作一个带有图像的游戏,你知道,因为游戏通常都有这些东西。但是整个表单一直在闪烁,我无法让它停止。是的,我对它进行了双缓冲并重写了update()方法,虽然这确实有帮助,但闪烁仍然存在。我不知道我的双缓冲是否有问题,或者我是否需要完全不同的东西 起初我认为它可能与clearRect()行有关,但当删除它时,游戏仍然闪烁,但当然不是每次都被清除。所以这根本没用。当减慢计时器时,闪烁几乎完全消失,但我需要将其减慢到100ms,即使如此,我仍然会得到一些闪烁。此外,这对游戏来说太慢了。我试着让一个计时器在10毫秒的计时器上做所有的事情,另外一个100毫秒的计时器用来画画,但它看起来很紧张。我可以将绘画计时器的速度降低到30毫秒左右,使其保持平稳,尽管闪烁仍然是一个问题 必须有一种方法可以每10-30毫秒执行一次,而不会闪烁。是否有其他类似于双缓冲但在这种情况下更好的方法,或者我可以使用的方法?提前感谢您的帮助Java图像闪烁,java,swing,timer,paint,double-buffering,Java,Swing,Timer,Paint,Double Buffering,我可以从谷歌搜索中看到,这个问题被问了很多次,但我发现没有一个解决方案适合我。我正在用Java制作一个带有图像的游戏,你知道,因为游戏通常都有这些东西。但是整个表单一直在闪烁,我无法让它停止。是的,我对它进行了双缓冲并重写了update()方法,虽然这确实有帮助,但闪烁仍然存在。我不知道我的双缓冲是否有问题,或者我是否需要完全不同的东西 起初我认为它可能与clearRect()行有关,但当删除它时,游戏仍然闪烁,但当然不是每次都被清除。所以这根本没用。当减慢计时器时,闪烁几乎完全消失,但我需要将
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);
}
不要直接在顶级窗口(如JApplet或JFrame)的
paint(…)
方法中绘制,因为您会丢失所有双缓冲和所有Swing功能。取而代之的是,绘制添加到JApplet的JPanel或其他JComponent派生组件(包括JComponent本身)的paintComponent(…)
方法
如果你在这里或谷歌上搜索这个主题,你会发现这个问题在这个网站和其他网站上被问了很多次,回答也是一样的
e、 g