JAVA双缓冲问题
publicvoidpaint(Graphicsg){super.paint(g);Graphics2Dg2=(Graphics2D)(g);inti,j;for(i=0...
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D)(g);
int i, j ;
for( i = 0 ; i < FRAME_WIDTH ; i++)
for(j = 0 ; j < FRAME_HEIGHT ; j ++)
{
if(map[i][j] == 0)
continue;
else if(map[i][j] == -1)
g2.setColor(Color.cyan);
else
g2.setColor(color[Math.abs(map[i][j]) - 2]);
g2.fill3DRect(i * BLOCK_SIZE, j * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE , true);
}
g2.setColor(Color.black);
g2.setFont(new Font("Serif" , Font.BOLD , 35));
g2.drawString(String.format("Score:%5d" , SCORE), (WIDTH) * BLOCK_SIZE, 14 * BLOCK_SIZE);
}
求问如何写update函数来实现双缓冲避免屏幕闪烁
我把下面这段代码加到了paint中,但是还是不行,而且有错误
if(iBuffer==null)
{
iBuffer=new BufferedImage(this.getSize().width,this.getSize().height, BLOCK_SIZE);
gBuffer=iBuffer.createGraphics();
}
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
g2.drawImage(iBuffer,0,0,this);
super.paint(g2); 展开
{
super.paint(g);
Graphics2D g2 = (Graphics2D)(g);
int i, j ;
for( i = 0 ; i < FRAME_WIDTH ; i++)
for(j = 0 ; j < FRAME_HEIGHT ; j ++)
{
if(map[i][j] == 0)
continue;
else if(map[i][j] == -1)
g2.setColor(Color.cyan);
else
g2.setColor(color[Math.abs(map[i][j]) - 2]);
g2.fill3DRect(i * BLOCK_SIZE, j * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE , true);
}
g2.setColor(Color.black);
g2.setFont(new Font("Serif" , Font.BOLD , 35));
g2.drawString(String.format("Score:%5d" , SCORE), (WIDTH) * BLOCK_SIZE, 14 * BLOCK_SIZE);
}
求问如何写update函数来实现双缓冲避免屏幕闪烁
我把下面这段代码加到了paint中,但是还是不行,而且有错误
if(iBuffer==null)
{
iBuffer=new BufferedImage(this.getSize().width,this.getSize().height, BLOCK_SIZE);
gBuffer=iBuffer.createGraphics();
}
gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);
paint(gBuffer);
g2.drawImage(iBuffer,0,0,this);
super.paint(g2); 展开
1个回答
展开全部
JPanel自己已经实现了双缓冲了。
如果需要自己写双缓冲的话。
用
BufferedImage br=new BufferedImage(w,h,type);//创建一张指定大小(一般为窗口的大小),与类型,缓冲图片。
Graphics2D g2d=br.createGraphics();
用g2d进行绘图。
之后再一次性拷贝到JPanel的上下文上就好了。
如果需要自己写双缓冲的话。
用
BufferedImage br=new BufferedImage(w,h,type);//创建一张指定大小(一般为窗口的大小),与类型,缓冲图片。
Graphics2D g2d=br.createGraphics();
用g2d进行绘图。
之后再一次性拷贝到JPanel的上下文上就好了。
更多追问追答
追问
我是在JFrame上绘图的,没用到JPanel
能不能再给出写更具体的代码呢,麻烦了
追答
JFrame的话,吧双缓冲的代码直接放置到paint方法中,然后再最后调用super.paint(g2d)
JFrame update方法是不会被系统调用。你再update中输出一下就知道了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询