点击这里给我发消息 点击这里给我发消息

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

添加时间:2013-12-19
    相关阅读: 设计 开发 技术 程序 链接 系统 平台
    电影和电视的画面可以理解为一种动画显示,它们一般以每秒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为双缓冲技术示意图。
 
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册