g如何用双缓冲解决java swing图像移动闪烁

发布网友 发布时间:2022-04-24 05:54

我来回答

2个回答

热心网友 时间:2023-09-16 13:44

双缓存:缓存区是绘图绘图时使用的屏外内存区。使用双缓存不是直接绘制屏幕,而是绘制到后缓存区,然后将整个缓存区复制到屏幕上,这样就可以同时更新整个屏幕,游戏者只看到要看到的东西了。后缓存区可能只是普通java图像。可以用Component类的createImage(int w,int h)方法生成后缓存区,如果是不使用活动绘制的小程序使用双缓存,则可以覆盖update()方法,改用双缓存,并用双缓存的图形描述表调用paint()方法,实现代码如下:

private Image doubleBuffer;
public void update(Graphics g){
Dimension size=getSize();
if(doubleBuffer.getWidth(this)!=size.width||doubleBuffer.getHeight(this)!=size.height)
{ doubleBuffer=createImage(size.width,size.height);
}
if(doubleBuffer!=null){
//绘制到双缓存区
Graphics g2=doubleBuffer.getGraphics();
paint(g2);
g2.dispose();
//将双缓存复制到屏幕
g.drawImage(doubleBuffer,0,0,null);
}
else
{//不要双缓存,只绘制屏幕
paint(g);
}
}
public void paint(Graphics g){
//在此绘图
}

热心网友 时间:2023-09-16 13:45

先创建一个固定大小的画布
Image image = new Image(20,20);
获得画布的graphics对象,这里为第一层缓冲
Graphics g = image.getGraphics();
g.setColor(Color.red);
g.drawOval(0, 0, 20, 20);

public void paint(Graphics g) {
super.paint(g);
//把这个画布当做整体画在你的panel上,此为第二层缓冲
g.drawImage(image,x, y, 20, 20);
}

没侧过,但是双缓冲的核心思想就是这样的,希望对你有帮助

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com