欢迎来到天天文库
浏览记录
ID:26541801
大小:48.00 KB
页数:11页
时间:2018-11-27
《java双缓冲技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java双缓冲技术Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色。在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理。本文从J2SE的一个再现了屏幕闪烁的JavaAppilication简单动画实例展开,对屏幕闪烁的原因进行了分析,找出了闪烁成因的关键:update(Graphicsg)函数对于前端屏幕的清屏。由此引出消除闪烁的方法——双缓冲。双缓冲是计算机动画处理中的传统技术,在用其他语言编程时也可以实现。本文从实例出发,着重介绍了用双缓冲消除闪烁的原理以及双缓冲在Java中的两种
2、常用实现方法(即在update(Graphicsg)中实现和在paint(Graphicsg)中实现),以期读者能对双缓冲在Java编程中的应用能有个较全面的认识。 关键词:Java消除闪烁双缓冲 一、问题的引入在编写Java多媒体动画程序或用Java编写游戏程序的时候,我们得到的动画往往存在严重的闪烁(或图片断裂)。这种闪烁虽然不会给程序的效果造成太大的影响,但着实有违我们的设计初衷,也给程序的使用者造成了些许不便。闪烁到底是什么样的呢?下面的JavaApplication再现了这种屏幕闪烁的情况://代码
3、段一[①],闪烁的再现importjava.awt.*;importjava.awt.event.*;publicclassDoubleBufferextendsFrame//主类继承Frame类{ publicpaintThreadpT;//绘图线程 publicintypos=-80;//小圆左上角的纵坐标 publicDoubleBuffer()//构造函数 { pT=newpaintThread(this); this.setResizable(false);
4、 this.setSize(300,300);//设置窗口的首选大小 this.setVisible(true);//显示窗口 pT.start();//绘图线程启动 } publicvoidpaint(Graphicsscr)//重载绘图函数 { scr.setColor(Color.RED);//设置小圆颜色 scr.fillOval(90,ypos,80,80);//绘制小圆 } publicstaticvoidmain(String[]args)
5、 { DoubleBufferDB=newDoubleBuffer();//创建主类的对象 DB.addWindowListener(newWindowAdapter()//添加窗口关闭处理函数 { publicvoidwindowClosing(WindowEvente) { System.exit(0); }}); }}classpaintThreadextendsThread//绘图线程类{ Dou
6、bleBufferDB; publicpaintThread(DoubleBufferDB)//构造函数 { this.DB=DB; } publicvoidrun()//重载run()函数 { while(true)//线程中的无限循环 { try{ sleep(30);//线程休眠30ms }catch(Interr
7、uptedExceptione){} DB.ypos+=5;//修改小圆左上角的纵坐标 if(DB.ypos>300)//小圆离开窗口后重设左上角的纵坐标 DB.ypos=-80; DB.repaint();//窗口重绘 } }}编译、运行上述例子程序后,我们会看到窗体中有一个从上至下匀速运动的小圆,但仔细观察,你会发现小圆会不时地被白色的不规则横纹隔开,即所谓的屏幕闪烁,这不是
8、我们预期的结果。这种闪烁是如何出现的呢?首先我们分析一下这段代码。DoubleBuffer的对象建立后,显示窗口,程序首先自动调用重载后的paint(Graphicsg)函数,在窗口上绘制了一个小圆,绘图线程启动后,该线程每隔30ms修改一下小圆的位置,然后调用repaint()函数。注意,这个repaint()函数并不是我们重载的,而是从Frame类继承而来的。它先调用update(Graphic
此文档下载收益归作者所有