4

我即将开始使用 AS3 完全在闪存中构建一个站点(根据客户的要求),并且想知道在应用程序架构方面这样做的最佳实践。该网站并不太大——想想主页、持久导航、8 个左右的小节,每个小节都有自己的内容,但小节之间的设计相似。过去,我会使用多个 swf(例如,一个用于导航,一个用于子部分)并动态加载它们;不过,现在我正在考虑采用不同的路线并使用更面向对象的设计,其中包含许多类和一个 swf(加上一个预加载器来加载它)。

是否有任何最佳实践来确定动态加载较小的 swf 与构建单个大型 swf 是否更好?在 AS2 中,我认为加载许多较小的 swf 更有意义,但随着 AS3 更强大的面向对象功能,我想知道是否仍然如此。

我知道反对单一 swf 设计的一个论点是在初始站点加载时加载所有内容会增加重量,但我认为这里没有足够重的内容值得真正关注。

有什么想法吗?

4

7 回答 7

1

这取决于您所说的“更小”是什么意思。

不要把它分成太小的块,否则你会因为连接开销而自杀。不要将整个网站打包成一个需要数周才能下载的庞大文件。

一个好的经验法则:如果您发现自己试图在用户等待下载时想出吸引人或有趣的东西来展示,请改用重组。

——马库斯

于 2009-02-27T18:26:28.623 回答
1

我认为这很重要取决于页面的内容以及您已经包含在您的 swf 中的资产数量。

我们通常只制作 2 个 swf:一个预加载器和一个真正的应用程序。

应用程序不包含任何文本或图像。一切(字体除外)都是从服务器动态加载的,因为在我们大多数情况下内容都是动态的。swf 的大小不会增加太多,您再添加 10 个类。

很难对您的问题给出 100% 的直接答案,因为这取决于内容的权重(以及它是动态的还是非常静态的)。

于 2009-02-27T18:31:03.167 回答
1

根据我的经验,如今(大多数)中小型 Flash 网站/应用程序的常见做法是两个 SWF 架构,一个加载核心的外壳。有时您可以只使用一个跟踪其自身加载进度的 SWF。也就是说,您希望按需加载内容和资产;图像、视频、动画和大型文本内容。这些通常不应嵌入到核心 SWF 中,而是应用户请求加载。在这两种情况下(一个与两个 SWF)的主要优势是代码维护。您只需在更新应用程序时重新编译核心 SWF。在此模型中,您仍然可以加载包含基于时间轴的动画的其他 SWF,只要您将应用程序代码保留在核心中即可。

希望有帮助!

于 2009-02-27T19:26:00.553 回答
1

从来没有一种“说所有”的方式来做任何事情。一个项目可能很小并且可以以程序方式编写代码,至于另一个项目可能错综复杂,涉及很多人并且肯定能够接受更改,那么 OOP 和设计模式可能是要走的路。对于肯定会被分成多个部分的基于生产的站点,将每个部分抽象为自己的 FLA/SWF/DOCUMENT CLASS 可以使您的代码可维护。如果 about 部分中的某些内容需要更改,我们只需打开 AboutDocumentClass.as,例如,然后进行更改。说实话,你现在应该使用 SWFAddress 来提供深度链接;为 Flash 站点启用收藏夹、后退和前进按钮。通过正确实施 SWFAddress 和一个不错的预加载器,可以实现一个非常流畅、占用空间小的站点,

话虽如此,我相信任何生产级闪存开发人员都应该了解 GAIA 框架。在短短几分钟内,您就拥有了 FLA、文档类、swf 等的完整骨骼结构。GAIA 不仅将输出的文件排列在智能层次结构中,而且还设置了 SWFObject、SWFAddress 以及预加载器。

这一切都是通过首先编辑一个 XML 文件来完成的,该文件位于您让 GAIA 输出新项目文件的 bin 文件夹中。一旦您完成了对 XML 和任何其他项目的编辑,您告诉 GAIA 搭建支架,对于您在 XML 中说明的每个部分,创建一个 FLA,一个带有挂钩到基于时间线的转换或 TweenLite/Max 实现的文档类搭脚手架前看你的选择。同样,这需要大约 5 分钟,并且您的站点具有预加载、SWFAddress 深度链接和过渡挂钩。

结果是使用一组标准名称和约定的文件的整洁输出,这些名称和约定应该易于阅读并减少十倍的冗余。

于 2009-03-04T00:38:50.847 回答
0

反对单一 swf 设计的一个论据是在初始 [...]

您将希望保留经常更改的部分和不分离的部分(如果有的话)。有一种叫做Ordered Creation的东西creationPolicy来处理加载时间。但除此之外,它实际上归结为您可以轻松维护的东西。

于 2009-02-27T18:24:47.503 回答
0

不,我知道
(“确定动态加载较小的 swf 是否更好的最佳实践”),但我可以想到一个很好的理由在一开始就加载所有内容,
我通常在做什么

  • 我将所有代码写在一个地方

  • 动态加载带有图形的 swf

于 2009-02-27T18:31:55.770 回答
0

您的加载时间可能是一个重要因素,但另一个需要考虑的因素是您的 SWF 的“外观”是否易于改变,而底层代码保持不变。对于我参与的几款“可换肤”游戏,游戏玩法相同,但我们希望能够更改图像以匹配赞助商客户,我们将标题分成两个 SWF,一个包含所有可执行代码 (Application.swf),另一个包含所有艺术资产(Library.swf)。这很成功,因为我们的艺术团队可以使用 Library.swf,只要他们保持相同的电影剪辑导出命名方案(和适用的帧标签),他们就可以构建新的艺术作品并简单地更换他们的“皮肤” " swf 无需重新编译或对源代码一无所知。

我认为我们使用 LoadMovieClip() 来处理库资源,当然所有库剪辑都需要在第 1 帧上用适当的标签标记为导出。此外,我们所有的代码都在单独的 AS 文件中,并且当我们使用 AS2.0 时,我们将影片剪辑作为类的成员包含在内,而不是将逻辑放在影片剪辑本身中。这几乎完全将艺术与代码隔离开来,除了 Application.SWF 中用于初始化和处理 OnEnterFrame() 函数的一些基本影片剪辑,然后将任何输入或基于刻度的功能传递到子链中对象。

我从事这些工作已经有一年了,所以我的术语可能有点不对劲。不过,我希望这会有所帮助。

于 2009-02-27T19:52:26.247 回答