- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 Java对多媒体的支持
第4章 Java对多媒体的支持
4.3 动画制作
初步掌握了在Java中处理各种媒体的基本技能后,我们接下来要涉及的将是Java多媒
体世界中最吸引人,最精彩的一部分--Java动画技术。这一节里,就让我们一起来由
浅入深地制作几个动画实例,并通过这些实例引出一系列措施用以改进动画的显示效果
,直至真正掌握Java动画技术的关键。
4.3.1 一个简单实例
其实,Java的动画原理也是很简单的,首先在屏幕上显示动画的第一帧(也就是第一
幅画面),然后每隔很短的时间再显示另外一帧,如此往复。由于人眼的视觉暂停而感
觉好象画面中的物体在运动。我们已经掌握了用paint( )方法去显示静态帧的技能,接下
来的问题就是如何不断地替换上其它帧画面。
我们可以发现,当用paint( )方法在屏幕上画好一帧画面时,再用鼠标拖动这个窗口
,或用其它窗口覆盖它再移开时,这帧画面并未被破坏,而是很快地就被重新画好了。原
来,是系统发现屏幕上该区域的画面已遭破坏,就自动地再一次调用paint( )方法将该画
面恢复。说得更确切一些,系统其实是去调用repaint( )方法来完成重画任务,而repaint
( )方法又去直接调用了update( )方法,update( )方法则先清除整个applet区域里的内
容,然后再调用paint( )方法,从而完成了一次重画工作。
至此,我们似乎应该可以确定制作动画的基本方案了,那便是在applet开始运行后
(即start( )方法中),每隔一段时间就取调用repaint( )方法来重画某一帧,而paint( )
方法中只需将相应的帧画到屏幕上。这一方案是否正确呢?我们就先来做一个简单实例试
试看吧。
这个实例很简单,是在applet中显示一行欢迎标题Welcome to here!。与以前不同
的是,这行标题并不是一下子显示出来,而是象打字一般,一个个字母跳出来,然后全部
隐去,再重复刚才的打字效果。用动画的术语来说,第一帧显示空白,第二帧显示W,
第三帧显示We,直至最后一帧显示完整个字符串后,再循环到第一帧。根据上述提供的
制作方案,我们很快就可以写出下面的程序:
1: import java.awt.Color;
2: import java.awt.Font;
3: import java.awt.Graphics;
4;
5: public class RollingMessage extends java.applet.Applet{
6:
7: String s = Welcome to Here !;
8: int s_length = s.length(); //字符串长度
9: int x_character = 0; //显示到第几个字符
10: Font wordFont=new Font(TimesRoman , Font.BOLD , 50);
11:
12: public void start() {
13: while(true) {
14: if (x_character++ s_length)
15: x_character = 1;
16: repaint ();
17: try {
18: Thread.sleep(300); //暂停300毫秒
19: } catch (InterruptedException e) {}
20: }
21: }
22:
23: public void paint (Graphics g) {
24: g.setFont (wordFont);
25: g.setColor (Color.red);
26; g.drawString (s.substring(0,x_character), 8, 50);
27: }
28: }
上述程序中的第18行调用了sleep( )方法,它是Thread类中定义的一个类方法(即含
有static关键字的方法),调用它能使正在运行着的程序暂停指定的毫秒数。如果不调用
sleep( )方法,appplet就会全速运行,必将导致动画的换帧速度太快,用户就来不及看
清动画的内容,得到的只有乱闪的画面。因而,动画的制作过程中需要不断地调整每帧
之间的时延数值,使其达到满意的播放速度。程序中的第17行和第19行可能看起来有点
古怪,其实try和catch是为了让我们能完善的处理Java程序运行时产生的错误,也就是
异常处理(详见第7章)。此时我们只需简单地认为,如果当程序正在执行try中的语句
时发生了异常情况,就由catch中的语句来处理。另外,
文档评论(0)