让Director跑得更快 王文山 2001年 11期 用Director8创作多媒体时,人们往往注重界面、动画、交互的设计与制作,但作为一件成功的多媒体作品,它不仅要求画面制作精美,交互功能很强,同时对它的执行效率也提出了较高的要求,它必须能满足在普通用户的电脑上,甚至更低配置的电脑上也能正常运行。因此,如何减小程序的体积,提高程序执行的速度是我们经常要面对的问题。本人根据多年使用Director的经验,认为要让Director“跑”得更快,执行效率更高,至少应从以下几个方面着手:   #1 一、素材加工    图片、声音、动画、文字、视频是创作多媒体不可缺少的素材。对于如何加工素材,不少人还存在错误的看法。如有的人认为图片用真彩色最好,声音也一定要用44.1KHz的或更高。的确,高品质的图像、声音和视频再加上高配置的电脑,其播放效果肯定好,但它却不适合一般电脑用户使用。实际上经过一定的技术处理,即使一般品质的素材也能获得较理想的播放效果,方法如下。    1.BMP格式 一般来讲,图像可考虑采用16位,BMP格式。它对播放速度影响不大,且图像不损失;    2.JPEG格式 文件虽小,但播放时需要临时解压,占用CPU,影响速度,因此不宜采用(除非用来做网络多媒体)。对于需要做部分透明或半透明处理的图片,可采用PSD格式,如果是单层可直接引入,如果是多层,可借助Photocaster插件或Firework软件(也需插件支持)引入。    3.声音通常采用22.05KHz、16-bit的WAV格式,频率仅44.1KHz声音的一半,但质量却很接近,用来表现人声和乐声都比较适宜。如果对声音质量有较高要求,也可采用44.1KHz的声音,再高就没有太大必要了。    4.动画和视频以MOV和AVI两种格式为主,但以MOV格式为最优。这是因为MOV格式不仅可提供更加灵活的控制和更丰富的信息(它可以同时包括多路声音、图像、文字轨道,并可单独读取,还可以实现虚拟现实)。另外,它的播放引擎要优于AVI格式,播放较为流畅,但不便之处就是要求用户端必须预装相应版本的QuickTime播放器。不过,现在越来越多的用户已经安装了QuickTime播放器,况且我们还可以在发行多媒体光盘时附带发送QuickTime安装程序。    5.文字处理分两种情况,一种是不太追求美观,而注重文字的灵活性(如在程序运行中需要动态改变文字内容),这种情况可使用Text演员(Field演员已没有优势,基本不采用);另一种是文字内容固定,但对美观程度要求很高(如特殊字体字、特效字等),这种情况可把文字转为图片引入。   #1 二、内存管理    Director能自动控制内存的使用,在播放时,可根据演员出场、退场的顺序自动完成预载和卸载,不需要人工干预Director就已经做得很好了。但若要获得绝佳的播放效果,使整个播放过程流畅自然,没有迟滞和停顿,就必须加以人工干预,使调入和卸载完全掌握在你的控制之下。其基本的操作是对演员、帧和电影的预载和卸载,常用的Lingo命令如下:    预载和卸载演员:preLoadMember whichCastMember(或preLoadMember fromCastmember,toCastmember);unLoadMember member whichCastMember(或unLoadMember fromCastmember,toCastmember)    预载和卸载帧:preLoad toFrameNum(或preLoad fromFrame,toFrameNum);unLoad toFrameNum(或unLoad fromFrame,toFrameNum)    预载和卸载电影:preLoadMovie whichMovie;unLoadMovie whichMovie    以上命令可以实现对一个或多个连续演员或帧的预载和卸载,当然也可以预载和卸载整个电影。预载和卸载通常选在CPU负载量相对轻松的时候进行,使用户在根本无从察觉的情况下就已经完成了下一步播放的准备,以实现所谓的“空闲加载”。需要提出的是,频繁的使用预载和卸载可能并不一定是好事,因为Director本身控制内存的能力还是可以信赖的,仅在我们用目标机测试时,明显感觉到速度“慢”的情况下,才有使用Lingo命令完成预载、卸载的必要。评价手工预载和卸载的最好办法是试验,可以尝试用不同的方法管理内存,看看哪种是最优化的。   #1 三、程序打包    Director发行多媒体主要以CD-ROM为主,其基本方式是:EXE+DXR或EXE+DCR,这两种模式采用者都不在少数,但笔者认为采用EXE+DXR这种模式较好,之所以不采用EXE+DCR这种模式是因为DCR是一种压缩文件,同不采用JPEG格式图片一样,都是考虑到解压耽误时间的问题。EXE+DXR模式中的EXE指的是播放器,用它来驱动其它文件,而这个播放器通常我们会把它做成近似空的(仅有简单的跳转命令如:Go to movie“main”,除此脚本演员外再无其它演员),而这样做的目的是缩小可执行文件(EXE)的体积,减少调入内存的时间,提高执行速度。依笔者的经验,越小的播放器“跑”得越快,下面就介绍一个49K的超小播放器的制作方法:    1.新建run.dir文件,双击第一帧格,输入lingo代码:Go to movie“main”(其中“main”为主程序文件,通过它来调用和链接其它文件) ;    2.打开菜单Modify/Movie/Xtras,打开Movie Xtras对话框,如图所示(^11020702a^),移除所有的Xtras,然后点击OK按钮;    3.打开菜单File/Save and compact,压缩保存;    4.打开菜单File/Projector,选择run.dir文件,点击Options,打开对话框,Media选项勾选Compress,player选项勾选Shockwave,然后点击OK按钮,再点击Creat按钮,命名run,生成run.exe文件;    5.打开Director安装目录,拷贝Iml32.dll、Dirapi.dll、Proj.dll三个文件至run.exe同路径下;    6.在run.exe同路径下新建文件夹Xtras,从director安装目录下的Xtras中拷贝dxr文件中用到的Xtra。通过以上5步建立的播放器才49K,而且执行速度明显加快。需要指出的是附带发行的Xtras要注意版权的问题,同时尽量把一些无用的Xtra筛选掉。    提高执行效率除以上三个方面外,有一些细小的问题也应引起注意,如DXR文件一般不要太大,应以系列化的小型文件(不超过10M)为主,演员库可以采用外链的方式(即:CXT文件),共享素材应建立外部共享素材库,大的声音、调用不是很频繁的图片也应以外部文件的形式存在。必要的情况下,还可采取“光盘和硬盘”的素材组织方式,即:让用户在第一次运行时先安装部分素材到硬盘,正常使用时光盘、硬盘并用以保证速度。