保持Flash游戏媒体资源的正确方法

时间:2011-06-10 07:30:32

标签: flash actionscript-3

我们正在使用flash cs5和actionscript 3(根本没有flex)开发史诗游戏。 我们需要使用库中的大量图像和其他媒体内容。早期我只是将它们保存在我的主要.fla中,但随后编译swf变得非常慢(更多图像 - 更多时间编译)。所以我将所有图像都放在flash外的文件系统中,这很有帮助。但随后出现了一些滞后和错误,特别是当我们在远程服务器上测试游戏时。看起来像文件只是没有时间加载(或他们加载不完整) - 虽然我做的非常正确,顺序,与onload等事件。

最后,我创建了另一个包含所有图像和资源的swf。我在主SWF中加载了一次,只有当我需要添加新图像时才编译它。它运作得相当好,但我觉得我做错了,或者有另一种正确的方法来更轻松地组织资源。第二个瑞士法郎还有一些小麻烦;例如,我必须让用户等到它在我的第一个文件中加载,如果我想从我的桌面运行,我总是必须将这两个文件放在一个地方附近。而且,随着图像数量的增长和增长,再次编译我的第二个SWF变得很烦人,即使我不需要经常这样做。

所以我正在寻找一种公认的,通用的,正确的方式来为我的游戏组织资源,这是游戏开发者使用的,我可以学习和使用。

2 个答案:

答案 0 :(得分:4)

您需要做的是构建资产管理器类(或类)。这个类应该处理所有资源加载,以便您可以轻松地更改加载它们的方式,而无需在整个地方进行更改。

理想的开发方式是在外部加载文件,您可以轻松替换它们,如果您在团队中工作,则不必处理主.fla文件中的冲突问题。 (这意味着它自己的每个文件,而不是单个资产swf)

您可能想要使用加载库,因为编码不是很有趣,我经常使用BulkLoader。它有点偏大,但效果很好。

但是,在部署到服务器时,根据游戏的类型,将所有这些文件放在那里可能会有点麻烦。许多Flash游戏网站甚至不支持多个文件,而是更喜欢一个巨型.swf。那时你的资产加载类是时候发光了,因为它全部由一个类包装,你可以改变它的内部工作来使用.zip文件,或者你想要单个文件,[Embed]标签(需要mxmlc编译器,但它真的很容易设置)

并且,请不要发出警告,这会让你遇到更多问题而不是解决问题。

答案 1 :(得分:1)

Flash开发人员可以通过多种方式为游戏组织资源,但最好的方法取决于您正在开发的游戏类型。

许多游戏使用磁贴来构建它们的级别,并使用spritesheets来实现实体/字符/等等,因此可以找到几个内置此功能的框架 - PushbuttonEngine(http://pushbuttonengine.com/)让人想起 - 但我认为你在这一点上已经取得了太大的进展。

您可能想要检查的一个策略是将每个tileset(或一组相关资产)放在一个zip文件中,然后加载它。有许多优秀的AS3库允许您解析Flash内部的zip文件,但nochump.com实现可能是最好的之一:http://nochump.com/blog/archives/15

通过这种方式,您仍然可以以模块化方式工作,并且每次更改时都不必编译swf文件。无论什么时候发生变化,您仍然需要解压缩/压缩资产,但这仍然比在Flash内部编译或在运行时单独加载所有资产(这可能会杀死您的网络服务器,必须处理100个请求)要快得多单场比赛)。

此外,由于您抱怨Flash中的编译时间较长,请尝试尝试:在“操作脚本设置”下,取消选中“警告模式”框。警告模式为您提供有关非类型变量或重复变量等明显内容的编译器警告......但关闭它可以真正减少编译时间。

当我在一个资产非常重的项目上工作时,我发现了这一点,在禁用它后,我从30秒到5秒编译了我的swf。