编辑: 阿拉蕾 2019-07-06
多线程与动画 程序(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;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题