初级视频编辑室|草蜢非编论坛|初级视编室|草蜢视频编辑|会声会影|威力导演|电子相册

 找回密码
 加入初编室
搜索
查看: 1205|回复: 5
打印 上一主题 下一主题

制作快速启动的projector (转自5Dmedia)

[复制链接]

296

主题

1132

帖子

2万

积分

超级版主

Rank: 8Rank: 8

论坛版主精华帖勋章

跳转到指定楼层
楼主
发表于 2014-11-5 07:59:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
onekey onekey
制作快速启动的projector (转自5Dmedia)
donlee
以Director作为多媒体开发平台,最终生成的可执行文件被称之为projector,通常它的启动速度比较慢,往往用户双击了应用程序图标后,一时看不到程序的启动,于是多次点击,造成同一程序的多个副本同时启动,整个过程雪上加霜,如果应用程序是放在光盘上直接运行,尤其令人难以忍受。为了解决这个问题,Macromedia随Director5.0发布了一个小文件--launcher.exe,通过简单的设置可以先启动launch.exe,显示一个“请稍候...‘‘之类的信息,与此同时在后台启动真正的projector。但在启动过程中所显示的用户界面非常单调,无法令人满意。目前Director最新版本为8.0,但对此尚没有理想的解决方案,怎样获得尽可能快速启动的projector,成为很多开发人员共同关心的问题,下面的几种措施可供参考。
一、使用splash screen技巧
较大的软件安装过程中,往往在复制文件的同时,显示进度条或splash screen之类的东西,以避免用户尴尬地等待。Director 8.0版本所生成的projector也具有此功能,我们可以制作一个位图文件projector.bmp(与应用程序的主文件名相同)作为splash,启动projector后,立即在屏幕上显示出此图片,尽管实际的启动时间并没有缩短,但避免了原来令人尴尬的“没有反应”情况下的等待。
二、恰当设置projector.ini文件
打开director.exe同目录下的director.ini文件看一下,有这样一项设置:
[Settings]
SingleInstance=1
建立一个projector.ini文件,内容如法炮制,其作用在director.ini内有清楚的说明,这里不再做更多的解释,此文件内的其它设置也很值得一看。
有人提出用下面的方法实现类似功能:在程序启动时通过fileio xtra或getpref、setpref等方法向一个特定文件内读写程序已启动的标记,一个考虑得比较全面的例子可在http://www.image.dk/~hede/lingo/direct/soloist/soloist.html上找到。但这种做法的效率并不比设置ini文件更高些,如果是在光盘上执行,程序还要更复杂些。
三、制作stub projector
上面谈到的两种措施并未使程序的启动时间有实质性缩短,为了真正加快程序的启动速度,我们要先分析一下projector在启动过程中需要完成哪些工作。
当用户启动了projector,如果这是一个standard(在create projector的options下选择)模式的projector,则它的内部已经包含了全部必要的文件,一般来说,这些文件包括资源文件dirapi.dll、msvcrt.dll、iml32.dll和proj.dll(这四个文件可以在director.exe同一目录下找到),以及用户在开发过程中所用到的所有xtra文件,我们也可以用下面的方法获知projector中已经包含了哪些文件:制作一个简单的、standard模式的projector,然后执行它,同时通过资源管理器或类似方法看一下系统的temp目录(一般是C:\Windows\TEMP)会有一个类似tempfolder.aaa的文件夹,这里面就是上面提到的那些文件。这里我们可以知道,当projector启动时,它从自身释放出这些文件到系统的临时目录下,然后使用这些文件。
可以想见,如果不把这些文件打进包里,而放在外部,岂不是无须解压和写磁盘,从而加快了启动速度吗?答案是肯定的。事实上,我们可以更进一步,制作一个stub projector,方法如下:新建一个movie,在它的属性中把它分辨率设为1*1,位置设定在屏幕之外,整个movie只有一个moviescript类型的member,其内容为:
on startmovie
go to movie ‘‘main‘‘
end
用此movie制作一个projector,在create projector的optinos中选中shockwave模式,所得的exe文件大小约为50K。这就是一个stub projector。把我们真正的movie存为main.dir(或main.dxr、main.dcr),然后建立一个名为xtras(子目录名必须是xtras)的子目录,把上面提到的dll文件和所有必要的xtra文件复制到此子目录就完成了。
上面只是简略地介绍stub projector的制作过程,朋友们可以在http://www.macromedia.com/suppor ... start_stub_proj.htm
看到关于stub projector更详尽的文档,相关文档还讨论了关于xtra文件外置的其它优点。
这里最重要的一点是只复制必要的xtra文件,因为程序启动时会把xtras子目录下的所有xtra文件加载到内存中,多余的xtra不仅拖延启动时间,而且会在程序运行时占用系统资源。至于哪些xtra是自己所必须的,与所用到的媒体类型、过渡效果的使用以及程序内部的设置等等诸多因素有关,已经大大超出了本文所讨论的范围。
四、恰当选择movie最初呈现内容
我们知道,在movie中可以通过lingo语句go to movie或play movie来切换不同的movie,所以为了尽快完成movie加载,可以让projector先播放一个非常小的movie,一般以小的视频片断或软件的主界面为好,尽量避免使用过大的媒体文件或文本内容,以此为入口调用其他movie,或在后台加载即将播放的movie。
五、动态加载xtra
前面已经谈到,projector启动时,会自动加载xtras子目录下的所有资源和xtra文件,我们可以把一些暂时不用且体积较大的xtra文件(一般为lingo xtra,如Beatnik等)放到其它目录(如othxtras)下,等程序启动后在movie的适当位置(不应在第一帧内)用openxlib加载,以缩短projector的启动时间。
加载xtra可参考以下script:
on LoadOtherXtras
openxlib the applicationPath & ‘‘othxtras‘‘
--或 openxlib the applicationPath & ‘‘othxtras\Beatnik.x32‘‘
end
第四、五两种方法可结合起来灵活运用,以确保程序尽快完成初始的启动。
六、光盘刻录时的最后优化
对于直接在光盘上运行的projector,考虑到光驱的寻道时间等因素,在刻录光盘前应注意适当安排文件在磁盘上的次序,并在刻录软件中适当设置选项(如在Easy CD Creator的General中选中Preserve normal file ordering),应尽可能把启动时要加载的资源和素材文件放到光盘上相邻的位置,以最大限度地减少在光盘上寻找文件所耗费的时间。
在实际的项目中,上述措施不一定全部采用,一般前三项是应该重点考虑的,当主movie文件含有大的媒体或xtra文件,后几种手段会有比较明显的效果。

楼主热帖
河边已是一首歌
回复

使用道具 举报

296

主题

1132

帖子

2万

积分

超级版主

Rank: 8Rank: 8

论坛版主精华帖勋章

沙发
 楼主| 发表于 2014-11-5 08:00:10 | 只看该作者
对上边文章的修正,不要使用openxlib来加载director xtra [aougu]

事情的经过是这样的,为了追求更高的效率,我按照上边这篇文章做了一个没有任何xtra的project,在运行以后再加载xtras,可是发现不行,一些xtras怎么样都加载不上,我就跑到micromedia的站点上查找,让我找到下边这个文章.
文章的意思是说作者不建议使用openxlib,原因有3
1,openxlib只能使用在script xtras上边,如果一个xtras包含tool 或者 asset Xtras 那么openxlib就不能加载这些xtras(我碰到的就是这样的情况)
2,openxlib的工作原理是让direcotor重新搜索所有的xtras,来判断那个是新加的xtras,这么做会降低程序的速度
3,对于一些使用了 BEGIN_XTRA_DEFINES_CLASS (我不懂,估计是编写xtras时候用的)的xtras会产生冲突,openxlib会加载错误的代码

原文如下,e文太差,不知道翻译的对不,反正我是不用了

Don』t use openXlib with Director Xtras
The openXlib command can load a scripting (Lingo) Xtra as well as the older Lingo XObject.

However, we recommend against using openXlib. Instead, place Xtras in the Xtras folder or a subfolder of it.

Here are some reasons against using openXlib.

openXlib only works for scripting Xtras. If an Xtra file contains tool or asset Xtras, openXlib won』t load them.
openXlib makes Director re-scan its set of Xtras to figure out what new Xtra is available. This can be slow.
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.
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.
河边已是一首歌

42

主题

523

帖子

5769

积分

初编室上校

Rank: 9Rank: 9Rank: 9

板凳
发表于 2014-11-5 17:19:57 | 只看该作者
有了您的参与论坛会更辉煌。

428

主题

8464

帖子

7万

积分

超级版主

Rank: 8Rank: 8

精华帖勋章论坛版主活跃会员百帖纪念荣誉勋章帅哥会员论坛万元户

地板
发表于 2014-11-9 20:20:51 | 只看该作者
谢谢楼主提供分享

206

主题

4527

帖子

7万

积分

初编室元帅

Rank: 14Rank: 14Rank: 14Rank: 14

活跃会员帅哥会员百帖纪念荣誉勋章论坛万元户

5#
发表于 2014-11-16 09:06:56 | 只看该作者
谢谢楼主提供分享!!

131

主题

5844

帖子

12万

积分

初编室元帅

Rank: 14Rank: 14Rank: 14Rank: 14

帅哥会员活跃会员论坛万元户百帖纪念荣誉勋章

6#
发表于 2015-1-13 10:50:57 | 只看该作者
看一看,逛一逛。
您需要登录后才可以回帖 登录 | 加入初编室

本版积分规则

手机版|小黑屋|初级视频编辑室

GMT+8, 2024-12-26 02:27 , Processed in 0.107768 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表