第十三章多媒体技术131图像处理132声音文件的播放13内容摘要:

public class rollwordscreen extends Applet implements Runnable{ public Thread runner。 public int xpos。 public void init(){ xpos=600。 setBackground()。 } public void start() { if (runner == null)。 { runner = new Thread(this)。 //new Thread ()。 } } public void stop() { if (runner != null) { ()。 runner = null。 } } public void run() { while(()==runner){ xpos=xpos10。 if(xpos==20) xpos=600。 repaint()。 try { (200)。 } //wait catch (InterruptedException e) { } } } public void paint(Graphics g){ ()。 (xpos,10,200,150)。 ()。 (new Font(TimesRoman,48))。 (Hello!,xpos,60)。 } public void update(Graphics g){ paint(g)。 }} 消除动画的闪烁 每帧图象消失后在人的视野里只能保持几十毫秒的时间。 在动画实现时,如果从前一帧图象消失到下一帧图象绘制完成这一段时间超过了这几十毫秒,就会让人产生闪烁感。 我们可用两种方法来减少闪烁,一种是重载 update()方法,一种是使用双缓冲技术。 (1)重载 update( ) 方法 当 AWT接到一个重绘请求时 , 就调用 update( ) 方法 .在缺省情况下 ,该方法会清除整个背景 ,再调用 paint().在实际情况中 ,没有必要将整个背景清除 ,只需将前一帧与当前帧的不同之处清除 . 重载 update()方法,完全接管动画帧的清除和显示工作。 也就是说,将原来的 update()方法的清除代码和在 paint()方法中的绘图方法都包含在新的 update()方法中,从而避免了每次重绘时将整个区域清除。 public void paint(Graphics g){ //清除 前一帧与当前帧的不同之处 //绘出本帧。 } public void update(Graphics g){ paint(g)。 } (2)双缓冲技术 在显示一幅图象时 , 如果绘图指令过多 , 则有可能使这帧图象的显示无法在一个显示器刷新周期内完成。 这样 , 也会造成闪烁感。 我们可用一个数组来虚拟一个 “ 显示器 ” , 将一帧图象先绘制在这个虚拟的 “ 显示器 ” 上 , 待整个图象绘制完毕 , 再一次性显示到屏幕上去。 这样 , 因为绘制图象的操作都是对内存的操作 , 只需在最后才访问一次显示器 , 所以图象的显示速度得到很大提高。 但是要占用一定的内存 . 在 Java中 ,这个虚拟的显示器被封装在一个 Image对象中 . (1)说明 Image对象和 Graphics对象 public Image offscreenImg。 public Graphics offscreenG。 (2) 在 init()方法中 ,创建 Image对象和 Graphics对象 offscreenImg=createImage(600,600)。 offscreenG=()。 (3)在 paint()方法中 ,调用 Graphics对象的绘图方法 ,把图形绘到Image中 . ()。 ()。 (4)将图形一次性绘到显示器上 . (offscreenImg,0,0,this)。 完整的动画程序框架 : import .*。 import .*。 public class ... extends Applet implements Runnable{ Color nowcolor=。 public Thread runner。 public Image offscreenImg。 public Graphics offscreenG。 public void init(){ offscreenImg=createImage(600,600)。 offscreenG=()。 } public void start() { if (runner == null)。 { runner = new Thread(this)。 //new Thread ()。 } } public void stop() { if (runner != null) { //()。 runner = null。 } } public void run() { int speed=200。 //get speed while(()==runner) … //帧号或其他变量变化 repaint()。 try { (speed)。 } //睡眠 c。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。