是否有最佳实践来确定是更好地动态加载较小的swf文件还是构建单个大型swf文件?在AS2中,我认为加载许多较小的swf文件更有意义,但是随着AS3更强大的面向对象能力,我想知道是否仍然如此。
我知道反对单个swf设计的一个论点是在初始加载时加载所有内容的额外负担,但我认为这里没有足够重的内容,因此这并不是真正的问题。
你有什么想法吗?
是否有最佳实践来确定是更好地动态加载较小的swf文件还是构建单个大型swf文件?在AS2中,我认为加载许多较小的swf文件更有意义,但是随着AS3更强大的面向对象能力,我想知道是否仍然如此。
我知道反对单个swf设计的一个论点是在初始加载时加载所有内容的额外负担,但我认为这里没有足够重的内容,因此这并不是真正的问题。
你有什么想法吗?
这取决于你所说的“更小”是什么意思。
不要将它分成太小的块,否则连接开销会让你崩溃。也不要将整个站点打包成一个庞大的东西,需要几周才能下载完。
一个好的经验法则:如果你发现自己在试图想出引人入胜或有趣的内容来展示,而用户正在等待下载,那就重新构建。
-- MarkusQ
我认为这主要取决于页面的内容以及您已经包含在swf中的资产数量。
通常我们只制作两个swf:一个是预加载器,另一个是真正的应用程序。
应用程序不包含任何文本或图像。除了字体之外,所有内容(动态内容)都从服务器动态加载。如果再添加10个类,swf的大小不会增加太多。
很难直接回答您的问题,因为它取决于内容的重量(以及它是动态还是非常静态的)。
没有一种“万能”的方法来做任何事情。一个项目可能很小,可以用过程式编码的方式完成,而另一个项目可能非常复杂,有许多人参与,并且肯定能够接受变化,那么面向对象编程和设计模式可能是更好的选择。对于一个肯定会被分成几个部分的生产网站,将每个部分抽象成自己的FLA/SWF/DOCUMENT CLASS可以使您的代码易于维护。如果关于部分需要更改,我们只需打开AboutDocumentClass.as文件进行更改。现在应该使用SWFAddress来提供深度链接,为Flash网站启用收藏夹、后退和前进按钮。通过正确实现SWFAddress和一个漂亮的预加载程序,可以实现一个非常流畅、低占用的网站,易于管理和扩展。
话虽如此,我认为任何生产级别的Flash开发人员都应该了解GAIA框架。只需几分钟,您就可以拥有整个FLA、文档类、swf等的骨架。GAIA不仅以智能层次结构排列输出的文件,还设置了SWFObject和SWFAddress,以及预加载程序。
首先,您需要编辑一个XML文件,该文件位于GAIA输出新项目文件的bin文件夹中。编辑完XML和其他内容后,告诉GAIA进行脚手架搭建。对于XML中涉及到的每个部分,都会创建一个FLA文件,其中包含一个文档类,可以钩取基于时间轴的转换或TweenLite/Max实现(具体取决于在搭建之前的选择)。整个过程大约需要五分钟,然后您就可以得到网站的框架,包括预加载、SWFAddress深度链接以及转换的钩子。
结果是使用标准名称和约定的整洁文件输出,这应该很容易阅读,并且可以将冗余度减少十倍。
creationPolicy
的东西来处理加载时间。但除此之外,真正关键的是你自己能够轻松维护的东西。目前我所知道的是没有最佳实践可以确定何时动态加载较小的 SWF 文件更好,但我可以想到一个很好的理由在开始时就加载所有内容。
我通常的做法我会将所有代码写在同一个地方
动态加载包含图形的 SWF 文件
你的加载时间可能是一个重要因素,但需要考虑的另一个因素是,即使底层代码保持不变,你的 SWF 的“外观和感觉”是否容易改变。对于一些我参与开发的可换肤游戏,其中游戏玩法完全相同,但我们希望能够改变图像以匹配赞助客户端,我们将标题分成了两个 SWFs,一个包含所有可执行代码(Application.swf),另一个包含所有艺术资源(Library.swf)。这个方法效果很好,我们的美术团队可以对 Library.swf 进行修改,只要他们保持相同的 movieclip 导出名称方案(以及适用的帧标签),他们就可以构建新的艺术品,并简单地交换他们的“皮肤” SWF,而无需重新编译或了解源代码的任何内容。
我认为我们使用LoadMovieClip()来处理库中的资源,当然所有库剪辑都需要在第1帧上标记为导出,并带有适当的标签。此外,我们所有的代码都在单独的AS文件中,由于我们使用的是AS2.0,因此将电影剪辑作为类成员包含,而不是将逻辑放在电影剪辑本身中。这几乎完全将艺术与代码分离,除了Application.SWF中的一些基本电影剪辑用于初始化和处理OnEnterFrame()函数,然后将任何输入或基于tick的功能传递给子对象链。