多线程与动画.docVIP

  • 18
  • 0
  • 约4.21千字
  • 约 7页
  • 2016-10-04 发布于天津
  • 举报
多线程与动画.doc

多线程与动画 程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。进程(process)是程序的一次执行过程,是操作系统运行程序的基本单位。程序是静态的,进程是动态的。系统运行一个程序就是一个进程从创建、运行到消亡的过程。 线程是比进程更小的运行单位,是程序中单个顺序的流控制。一个进程中可以包含多个线程。 线程是一种特殊的多任务方式。当一个程序执行多线程时,可以运行两个或更多的由同一个程序启动的任务。这样,一个程序可以使得多个活动任务同时发生。 动画是指连续而平滑地显示多幅图像。计算机动画原理十分简单,首先在屏幕上显示出第一帧画面,过一会儿把它擦掉,然后再显示下一帧画面,如此循环往复。由于人的眼睛存在着一个视觉差,所以感觉好像画面中的物体在不断运动。在计算机上,只要以10~30幅/每秒钟的速度显示图像即可达到满意的动画质量。 1.一个简单的动画程序 程序功能:在Applet中添加一个“天空”背景图像,然后令一个“飞机”图像从右移动到左。 编写LX7_6.java程序文件,源代码如下。 import java.awt.*; import java.applet.*; public class LX7_6 extends Applet { Image star, rocket; int x=0; public void init() { star=getImage(getCodeBase(),image/天空.JPG); rocket=getImage(getCodeBase(),image/飞机.gif); } public void paint(Graphics g) { g.drawImage(star,0,0,this); g.drawImage(rocket,310-x,10,this); try { Thread.sleep(50); x+=5; if (x==310) { x=0; Thread.sleep(1000); } } catch (InterruptedException e) {} repaint(); } } 编译程序LX7_6.java。 编写显示LX7_6.class的页面文件,在浏览器中显示结果如图7.6所示。 图7.6 (5)程序分析:程序中创建了两个Image对象t1和t2,在init方法中分别加载了两个图像文件。使用变量x用来改变“飞机”图像画出的位置(310-x,10),因为x的值是不断变化的,所以看起来图像在移动。 真正使“飞机”图像实现动画效果的代码在try…catch 块中。程序调用了Thread 类的sleep 方法(因为Thread 类属于Java.lang包的类,其sleep静态类方法可直接调用),因为sleep方法会产生中断异常,所以必须放在try…catch块中。如果不使用sleep方法,程序将全速运行,必将导致换帧速度太快,画面闪烁严重(你可以自己去掉sleep方法试一试)。休眠时间设定为50毫秒,相当于换帧速度每秒20(1000/50)。休眠结束后x的值加5,意味着下一帧跳伞画面的显示位置向左移动5个像素点。当跳伞移动到最右边即310点位置时,将x赋值0,跳伞重新回到了起点。 程序中paint方法的最后一条语句是调用repaint()方法,repaint方法的功能是重画图像,它先调用update方法将显示区清空,再调用paint方法画出图像。它们形成一个循环,paint调用repaint, repaint调用paint,使“飞机”图像不间断地反复画出,人看到的是图像在移动。 但运行这个Applet时,画面有闪烁现象。一般来说,画面越大,update以背景色清除显示区所占用的时间就越长,不可避免地会产生闪烁。如何解决这个问题呢? 2.使用双缓冲创建动画的程序 程序功能:使用双缓冲来建立动画的效果,清除闪烁的现象。 编写LX7_7.java程序文件,源代码如下。 import java.awt.*; import java.applet.*; public class LX7_7 extends Applet { Image buffer,img,star; Graphics g1; Thread td; int x=0; public void init() { buffer=createImage(getWidth(),getHeight());//创建图像缓冲区 g1=buffer.getGraphics();//创建绘图区 img=getImage(getCodeBase(),image/飞机.gif); star

文档评论(0)

1亿VIP精品文档

相关文档