我即将开始使用AS3完全在flash中构建一个站点(根据客户端的要求),并且想知道在应用程序架构方面这样做的最佳实践。该网站不是太大 - 想想主页,持久导航,8个小节左右,每个都有自己的内容,但各个小节之间的设计相似。在过去,我会使用多个swfs(例如,一个用于导航,一个用于子部分)并动态加载它们;但是,现在,我正在考虑采用不同的路线并使用更面向对象的设计,包含许多类和一个swf(加上预加载器来加载它)。
是否有任何最佳实践可以确定动态加载较小的swfs与构建单个大型swf是否更好?在AS2中,我认为加载许多较小的swfs更有意义,但是AS3的面向对象能力更强,我想知道是否仍然如此。
我知道反对单一swf设计的一个论点是在初始siteload上加载所有东西的额外重量,但我不认为这里有足够的重要内容,这是真正令人担忧的。
有什么想法吗?
答案 0 :(得分:1)
这取决于你所说的“较小的”。
不要把它分成太小的块,否则你会因连接开销而自杀。不要将整个网站打包成一个庞大的一团,下载需要数周时间。
一个好的经验法则:如果你发现自己想要在用户等待下载的同时想出引人入胜或有趣的东西,那么就进行重组。
- MarkusQ
答案 1 :(得分:1)
我认为这很重要取决于页面的内容以及您已经包含在swf中的资产数量。
我们通常只制作2个swfs:一个预加载器和真正的应用程序。
应用程序没有包含任何文本或图像。从服务器动态加载所有内容(字体除外),因为在大多数情况下内容是动态的。 swf的大小不会增加太多,你再添加10个类。
很难直接回答你的问题,因为它取决于内容的重量(以及它是动态的还是非常静态的)。
答案 2 :(得分:1)
根据我的经验,这些天(大多数)中小型Flash网站/应用程序的常见做法是两个SWF架构,一个加载核心的shell。有时您只需使用一个跟踪其自身加载进度的SWF即可。也就是说,您希望按需加载内容和资产;图像,视频,动画和大型文本内容。这些通常不应嵌入核心SWF中,而是根据用户请求加载。这两种情况(一对两个SWF)的主要优点是代码维护。您只需在对应用程序进行更新时重新编译核心SWF。在此模型中,只要您将应用程序代码保留在核心中,您仍然可以加载包含基于时间轴的动画的其他SWF。
希望有所帮助!
答案 3 :(得分:1)
从来没有一种“说所有”的做事方式。一个项目可能是小而精细的,以程序的方式进行编码,关于另一个项目可能是错综复杂的,涉及到很多人,并且大多数肯定能够接受改变,那么OOP和设计模式可能是最佳选择。对于基于生产的站点,肯定会被分成几个部分,将每个部分抽象为自己的FLA / SWF / DOCUMENT CLASS可以使您的代码可以维护。如果about部分中的某些内容需要更改,我们只需打开AboutDocumentClass.as,然后进行更改。让我们真实,您现在应该使用SWFAddress来提供深层链接;为Flash网站启用收藏夹,后退和转发按钮。通过正确实施SWFAddress和一个不错的预加载器,可以实现非常平滑,占地面积小的站点,易于管理和扩展。
话虽如此,我相信任何生产级别的Flash开发人员都应该了解GAIA框架。只需几分钟,您就拥有FLA的整个骨骼结构,文档类,swf等.GAIA不仅可以将输出的文件排列在智能层次结构中,还可以设置SWFObject,SWFAddress以及预加载器。
这一切都是通过首先编辑bin文件夹中的XML文件来完成的,只要你有GAIA输出新的项目文件。完成编辑XML和任何其他项目后,您告诉GAIA脚手架,对于您在XML中考虑的每个部分,都会创建一个FLA,一个挂钩到基于时间轴的转换或TweenLite / Max实现的文档类取决于您在脚手架前的选择。同样,这需要大约五分钟,你的网站骨骼有预加载,SWFAddress深层链接和转换挂钩。
结果是使用一组标准名称和惯例的文件整齐输出,这些名称和约定应该易于阅读并减少十倍的冗余。
答案 4 :(得分:0)
反对单一swf设计的一个论点是在初始[...]
上加载所有内容的额外权重
您需要保留经常更改的部分与不存在的部分(如果有的话)。有一种称为Ordered Creation和creationPolicy
的东西来处理加载时间。但除此之外,它实际上归结为一些你会习以为常的东西。
答案 5 :(得分:0)
没有我知道的
(“确定动态加载较小swfs是否更好的最佳实践”)
但我可以想到一个很好的理由在开头加载所有内容
我通常在做什么
我将所有代码写入一个 地方
动态加载swf
答案 6 :(得分:0)
您的加载时间可能是一个重要因素,但需要考虑的另一个因素是,当底层代码保持不变时,SWF的“外观和感觉”是否易于改变。对于我工作的几个“skinnable”游戏,游戏玩法完全相同,但我们希望能够改变想象力以匹配赞助商客户,我们将标题分为两个SWF,一个包含所有可执行代码(Application.swf),另一个包含所有艺术资产(Library.swf)。这很好,因为我们的艺术团队可以使用Library.swf,只要他们保持相同的movieclip导出命名方案(和适用的帧标签),他们可以构建新的艺术作品并简单地换掉他们的“皮肤” “swf无需重新编译或了解源代码。
我认为我们使用LoadMovieClip()来处理库资源,当然所有库剪辑都需要在第1帧上标记为具有适当标签的导出。此外,我们所有的代码都在单独的AS文件中,而且当我们使用AS2.0时,我们将影片剪辑作为类的成员包含在内,而不是将逻辑放在影片剪辑中。除了Application.SWF中的一些基本影片剪辑用于初始化和处理OnEnterFrame()函数,然后将任何输入或基于tick的功能传递到子代码链之外,这几乎完全将代码与代码隔离开来。对象。
自从我研究这些东西已经有一年了,所以我的术语可能有点过时了。不过,我希望这很有帮助。