分享
 
 
 

Java动画及自动浏览图片程序的开发

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

郭圣文

摘要 本文介绍了Java文字及图象动画的实现方法,并讨论了如何采用双缓冲技术来消除画面的闪烁现象,在此基础之上,开发了一个自动浏览图片程序。

要害词 Java动画 双缓冲技术 自动浏览图片

电影和电视的画面可以理解为一种动画显示,它们一般以每秒24帧的速度显示图象,利用人眼的暂停效应,产生一个连续的动作显示过程。因此,动画的本质是运动的图形,只要动画的速度(帧速度)足够快,则分散的的静态图形就会合并为一个连续运动的流程。

Java动画的实现,首先用Java.awt包中Graphics类的drawImage()方法在屏幕画出图象,然后通过定义一个线程,让该线程睡眠一段时间,到时后再切换成另外一幅图象,如此循环,从而达到显示动画的目的。

1 有关概念、类及方法

1.1 线程

Java的重要特性之一是其支持多线程的程序设计。在传统的程序设计中,要执行多任务是通过定时器中断等方法,定时监控多个任务的执行情况,采用任务中断切换的方式来轮换执行各个任务,从而达到多任务并发目的。这种方法一方面消耗了大量的内存空间和cpu资源,另一方面会带来系统安全性的问题。而线程作为程序的一个执行流,在某一瞬间可被看成计算过程的一种状态,它比进程更小,并发程度更高,因此也称为轻进程。线程是cpu调度的基本单元,而进程是资源分配的基本单元,线程的引入可以提高系统的吞吐量、提高任务之间的通讯效率、有效利用系统资源。

?线程的创建

线程创建有两种方法,一种是用new产生一个Thread类对象,另外一种方法是实现Runnable接口。在需要实现多继续,并且又要建立多线程时,只能采用Runnable接口方法。我们这里采用第一种方法:

ThreadName=new Thread

?sleep(long)

让线程睡眠一定时间不动作,参数单位为千分之一秒。

?suspend()

挂起线程,暂停其执行。

?resume()

唤醒挂起的线程。

1.2 ToolKit类

它提供了AWT与平台相关类和无关类之间的链接,提供了几种方法来访问与设备相关的一些特征。如从URL或本地系统中检索图象、获取屏幕的显示特征等。在程序中定义一个ToolKit类:ToolKit=getToolKit();

1.3 MediaTracker类

提供了治理图象文件加载的能力。方法StatusID(int id,boolean load)的作用是检测加载图象文件的状态(ABORTED,COMPLETE,ERRORED,LOADING),当检测到状态为COMPLETE时,说明图象加载完成。

2 文字动画

文字动画的实现程序比较简单,首先,用new方法创建一个新进程,用drawString()方法在屏幕显示相应文字,然后让进程睡眠一定时间,时间到后,改变文字显示位置,再重显文字。其中包含一个边界判定,重设坐标的过程,如此往复实现文字动画。程序运行后,在屏幕中心显示"欢迎进入动画世界!",每隔0.15秒向左移动一次,直到屏幕最左端又重新开始显示。具体程序见程序1(Applet小程序)。

3 图象动画

图象动画的实现方法与文字相似,只不过定义了一个Image数组,运用getImage()方法装载相应图象文件到该数组中。程序运行后,可见到一个可爱的小精灵在作抛球动作。另外,基于程序交互性的考虑,增加了两个事件的响应动作,一个是WINDOW_DESTROY,即关闭运行窗口,正常返回。另外一个是MOUSE_DOWN,当鼠标左按钮按下时,暂停线程以便让画面静止,再按一次左按钮,恢复暂停线程,继续显示下一幅画面。

假如将程序中的小精灵图象文件换成图片,并增加延迟时间,则可以实现图片的自动切换,变为自动浏览图片程序,源程序见程序2,

4 动画质量的改善

上一程序的运行后,我们发现了两个问题。第一是程序在图象完全加载之前就开始显示,出现切换过快现象。第二是画面闪烁。

对于前一个问题,可以用Java.awt包中的MediaTracker类来解决,当StatusID()方法返回值为COMPLETE时,说明所有的图象文件加载完毕,此时才开始显示画面。

第二个问题,解决起来要复杂一些。闪烁产生的原因是,在paint()方法中假如计算较为复杂,计算和绘制画面的时间超过了屏幕的刷新周期,则帧的第一部分在一个刷新周期中绘制,其余部分在下一个、甚至更后的周期绘制,这样,在帧的不同部分之间产生时间间隔,由此造成闪烁。解决途径之一是重载update()方法,update()的缺省实现是清除原来背景,然后调用paint()方法。因此通过重载update(),只有在必要时才清除整个背景。

解决途径之二是采用双缓冲技术,双缓冲技术是在后台图形区内创建一个图形对象,将需要绘制的图象绘于其上,然后传给paint()方法,由paint()方法绘于前台,同时,后台图形缓冲区进入下一帧图象的预备。图1为双缓冲技术示意图。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有