上一篇 | 下一篇

制作快速启动的projector

发布: 2007-1-25 16:56 | 作者: donlee | 来源: macromediachina.com | 查看: 337次

  以Director作为多媒体开发平台,最终生成的可执行文件被称之为projector,通常它的启动速度比较慢,往往用户双击了应用程序图标后,一时看不到程序的启动,于是多次点击,造成同一程序的多个副本同时启动,整个过程雪上加霜,如果应用程序是放在光盘上直接运行,尤其令人难以忍受。为了解决这个问题,Macromedia随Director5.0发布了一个小文件launcher.exe,通过简单的设置可以先启动launch.exe,显示一个“请稍候...''之类的信息,与此同时在后台启动真正的projector。但在启动过程中所显示的用户界面非常单调,无法令人满意。目前Director最新版本为8.0,但对此尚没有理想的解决方案,怎样获得尽可能快速启动的projector,成为很多开发人员共同关心的问题,下面的几种措施可供参考。
`6OfBG_MH 奥古多媒体d-p]7|5X-] n ?
  一、使用splash screen技巧
2x.Enk"mw%T5R
M j0rVoo@n   较大的软件安装过程中,往往在复制文件的同时,显示进度条或splash screen之类的东西,以避免用户尴尬地等待。Director 8.0版本所生成的projector也具有此功能,我们可以制作一个位图文件projector.bmp(与应用程序的主文件名相同)作为splash,启动projector后,立即在屏幕上显示出此图片,尽管实际的启动时间并没有缩短,但避免了原来令人尴尬的“没有反应”情况下的等待。 奥古多媒体$Tl7J%U1A.hU Zn

2eihQ2q1u q%g   二、恰当设置projector.ini文件
k j5h7U'|$sO
9@-G/wVLEa2p;[   打开director.exe同目录下的director.ini文件看一下,有这样一项设置:奥古多媒体J8`{pV

4{O~hV8|%m3iw [Settings]
.DKVcn'W,K-r SingleInstance=1
0W L#FdPA7hN
)B@fMQ#x8^*K9r2pn   建立一个projector.ini文件,内容如法炮制,其作用在director.ini内有清楚的说明,这里不再做更多的解释,此文件内的其它设置也很值得一看。奥古多媒体1|jvrg6U4kss_:J

r4T'V%oR   有人提出用下面的方法实现类似功能:在程序启动时通过fileio xtra或getpref、setpref等方法向一个特定文件内读写程序已启动的标记,一个考虑得比较全面的例子可在http://www.image.dk/~hede/lingo/direct/soloist/soloist.html上找到。但这种做法的效率并不比设置ini文件更高些,如果是在光盘上执行,程序还要更复杂些。
Ce/z^H1pR;S
!bx'I%o1l   三、制作stub projector奥古多媒体N%D"QDSI#PY'R

p [M%^I   上面谈到的两种措施并未使程序的启动时间有实质性缩短,为了真正加快程序的启动速度,我们要先分析一下projector在启动过程中需要完成哪些工作。奥古多媒体D(QU!w/RB

di(L"MW:oww7j&xcA   当用户启动了projector,如果这是一个standard(在create projector的options下选择)模式的projector,则它的内部已经包含了全部必要的文件,一般来说,这些文件包括资源文件dirapi.dll、msvcrt.dll、iml32.dll和proj.dll(这四个文件可以在director.exe同一目录下找到),以及用户在开发过程中所用到的所有xtra文件,我们也可以用下面的方法获知projector中已经包含了哪些文件:制作一个简单的、standard模式的projector,然后执行它,同时通过资源管理器或类似方法看一下系统的temp目录(一般是C:WindowsTEMP)会有一个类似tempfolder.aaa的文件夹,这里面就是上面提到的那些文件。这里我们可以知道,当projector启动时,它从自身释放出这些文件到系统的临时目录下,然后使用这些文件。奥古多媒体X[w!H]'R7E%h

g/Na;T)QE.j/R   可以想见,如果不把这些文件打进包里,而放在外部,岂不是无须解压和写磁盘,从而加快了启动速度吗?答案是肯定的。事实上,我们可以更进一步,制作一个stub projector,方法如下:新建一个movie,在它的属性中把它分辨率设为1*1,位置设定在屏幕之外,整个movie只有一个moviescript类型的member,其内容为:
D A U*qp8[2R R,X 奥古多媒体 fI?-|h U+S&d
on startmovie奥古多媒体Kd"B"Sip:}3J
   go to movie ''main''奥古多媒体r `1x;Z^&C A
end奥古多媒体3hFG:V V/~0c&X

9_.?x:}Et Y I   用此movie制作一个projector,在create projector的optinos中选中shockwave模式,所得的exe文件大小约为50K。这就是一个stub projector。把我们真正的movie存为main.dir(或main.dxr、main.dcr),然后建立一个名为xtras(子目录名必须是xtras)的子目录,把上面提到的dll文件和所有必要的xtra文件复制到此子目录就完成了。奥古多媒体 aF~-p4o*Z)n2Gy

o/b|6DNm   上面只是简略地介绍stub projector的制作过程,朋友们可以在http://www.macromedia.com/support/director/ts/documents/d8_fast-start_stub_proj.htm看到关于stub projector更详尽的文档,相关文档还讨论了关于xtra文件外置的其它优点。
|w0E(D/Zys^
;L _ }C@7t   这里最重要的一点是只复制必要的xtra文件,因为程序启动时会把xtras子目录下的所有xtra文件加载到内存中,多余的xtra不仅拖延启动时间,而且会在程序运行时占用系统资源。至于哪些xtra是自己所必须的,与所用到的媒体类型、过渡效果的使用以及程序内部的设置等等诸多因素有关,已经大大超出了本文所讨论的范围。 奥古多媒体6{}9t5J)O
奥古多媒体:A7a'{$x N$ms E
  四、恰当选择movie最初呈现内容奥古多媒体mf M-f5Y#E0H w
奥古多媒体T5QGU#_z PS
  我们知道,在movie中可以通过lingo语句go to movie或play movie来切换不同的movie,所以为了尽快完成movie加载,可以让projector先播放一个非常小的movie,一般以小的视频片断或软件的主界面为好,尽量避免使用过大的媒体文件或文本内容,以此为入口调用其他movie,或在后台加载即将播放的movie。
&qbB,@6nN:d7` 奥古多媒体(p'l4k I.s
  五、动态加载xtra
/X9h'l3X {)z.U q }
koY%fD2i*?   前面已经谈到,projector启动时,会自动加载xtras子目录下的所有资源和xtra文件,我们可以把一些暂时不用且体积较大的xtra文件(一般为lingo xtra,如Beatnik等)放到其它目录(如othxtras)下,等程序启动后在movie的适当位置(不应在第一帧内)用openxlib加载,以缩短projector的启动时间。奥古多媒体-do b X|c*`!?/M1T}

5G5sR}:YIX,x   加载xtra可参考以下script:奥古多媒体7@9I&n0gU2RJ&[
奥古多媒体cTI1|"C+_
on LoadOtherXtras奥古多媒体+I:}I&I(c L,]YL/N
  openxlib the applicationPath & ''othxtras''
3]%p1j Dn x   --或 openxlib the applicationPath & ''othxtrasBeatnik.x32''
(tC/J g$w~"tU ` end
&T4w"pSP"S 奥古多媒体J6S#_u E6e5b(az\
  第四、五两种方法可结合起来灵活运用,以确保程序尽快完成初始的启动。 奥古多媒体 FY3r3gn(W%f9[;}2C
奥古多媒体b3mr@.Z'qnA
  六、光盘刻录时的最后优化
Y Z}8B0`)@] 奥古多媒体R0D5Qe0O?(G1I
  对于直接在光盘上运行的projector,考虑到光驱的寻道时间等因素,在刻录光盘前应注意适当安排文件在磁盘上的次序,并在刻录软件中适当设置选项(如在Easy CD Creator的General中选中Preserve normal file ordering),应尽可能把启动时要加载的资源和素材文件放到光盘上相邻的位置,以最大限度地减少在光盘上寻找文件所耗费的时间。
&NkH\C W7R dS 奥古多媒体z'~Q;N5L U(if.P
  在实际的项目中,上述措施不一定全部采用,一般前三项是应该重点考虑的,当主movie文件含有大的媒体或xtra文件,后几种手段会有比较明显的效果。奥古多媒体0a[4l)P3k8Qu4L
奥古多媒体d8L$`eiK eo

vq V:f%[0_'MCv   附录:对上边文章的修正,不要使用openxlib来加载director xtra(下面文章内容作者:玩笑)奥古多媒体y\PVa!TF.~

&b'~C4x%B,F   事情的经过是这样的,为了追求更高的效率,我按照上边这篇文章做了一个没有任何xtra的project,在运行以后再加载xtras,可是发现不行,一些xtras怎么样都加载不上,我就跑到macromedia的站点上查找,让我找到下边这篇文章。文章的意思是说作者不建议使用openxlib,原因有三:奥古多媒体Y9v([*iV;?v,_G
  1. openxlib只能使用在script xtras上边,如果一个xtras包含tool或者asset xtras,那么openxlib就不能加载这些xtras(我碰到的就是这样的情况)。
&j9`.bweC:{e   2. openxlib的工作原理是让director重新搜索所有的xtras,来判断哪个是新加的xtras,这么做会降低程序的速度。奥古多媒体5p"s&T*pc1~.dB
  3. 对于一些使用了BEGIN_XTRA_DEFINES_CLASS(我不懂,估计是编写xtras时候用的)的xtras会产生冲突,openxlib会加载错误的代码。
cCP_Dq`
8W'zC `0u/a8U   原文如下,e文太差,不知道翻译的对不,反正我是不用了。
A!IgF0}u}Rl 奥古多媒体wl)R QUo%y!M[
  Donot use openXlib with Director Xtras奥古多媒体c/aA/j9o?O F
奥古多媒体B"e#j \e9^.GY#H M
  The openXlib command can load a scripting (Lingo) Xtra as well as the older Lingo XObject.
e.~1|1ppg*Z
bM0j ]!T8U|   However, we recommend against using openXlib. Instead, place Xtras in the Xtras folder or a subfolder of it.
R5y ` JV`f&x/| xQdJ
8Pow]6b   Here are some reasons against using openXlib. 奥古多媒体?(K{a!t q a
  openXlib only works for scripting Xtras. If an Xtra file contains tool or asset Xtras, openXlib won』t load them. 奥古多媒体#As SL"t"V7[{
  openXlib makes Director re-scan its set of Xtras to figure out what new Xtra is available. This can be slow. 奥古多媒体,e'@,g5S"l ?8NE
  Although openXlib makes Director re-scan Xtras, it still conflicts with the sophisticated versioning of Xtras (using BEGIN_XTRA_DEFINES_CLASS). openXlib may load the wrong code. 奥古多媒体m2BP;L;f w1q`
奥古多媒体|P2Q%o3\2V
  The only reason to use openXlib is if an Xtra has global or parent handlers and after a Lingo movie uses these you want to make the Xtra』s code unloadable.

字号: | 推荐给好友

 

评分:0

我来说两句

seccode