java双缓冲技术

java双缓冲技术

ID:26541801

大小:48.00 KB

页数:11页

时间:2018-11-27

java双缓冲技术_第1页
java双缓冲技术_第2页
java双缓冲技术_第3页
java双缓冲技术_第4页
java双缓冲技术_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。