BBS水木清华站∶精华区

发信人: KHP (人之初), 信区: Java        
标  题: Re: 如何使画面不闪烁? 
发信站: BBS 水木清华站 (Mon Aug  2 11:57:07 1999) 
 
 
每次 repaint 都创建一次,这样太浪费了吧。 
可以这样,增加两个成员变量 Image offImg, Graphics offG,改写 addNotify, 
paint 和 update 如下: 
 
public void paint(Graphics g) { 
  offG.drawLine(...); 
  offG.drawImage(...); 
  ... 
  ... 
  offG.drawString(...);  /* 意思就是要在 g 上画的东西先画在 offG 上 */ 
 
  g.drawImage(offImg, 0, 0, this); 

 
public void update(Graphics g) { 
  paint(g); 

 
public void addNotify() { 
  super.addNotify(); 
  offImg = createImage(size().width, size().height); 
  offG = offImg.getGraphics(); 

 
这样可以有效地防止画面的闪烁。 
 
【 在 Uet (LR) 的大作中提到: 】 
 建议使用双缓冲技术,将update(Graphics g)改为 
 update(Graphics g){ 
         Image img = creatImage(...); 
         Graphics ig = img.getGraphics(); 
         paint(ig); 
         g.drawImage(..,img...); 
 } 
 paint(Graphics g){ 
         ....//不用动 
 } 
 具体参数记不请了。原理就是:先将图画画到一个隐藏虚拟画面上,然后在将这个画面 
 一把仍到显示面版上。 
 
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 210.78.130.130] 

BBS水木清华站∶精华区