2011-06-10 65 views
1

我们正在开发一款使用flash cs5和actionscript 3(完全没有弹性)的史诗游戏。 我们需要使用库中的很多图像和其他媒体内容。早期我把它们放在我的主要.fla中,但是编译swf变得非常慢(更多的图像 - 更多的时间来编译)。所以我把所有的图像都放到了flash以外的文件系统中,这有助于。但后来出现了一些滞后和错误,特别是当我们在远程服务器上测试游戏时。似乎文件只是没有时间加载(或者他们加载不完整) - 虽然我做的非常正确,顺序,像onload等事件。为Flash游戏保留媒体资源的正确方法

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

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

回答

1

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

许多游戏使用瓷砖来建立他们的关卡,以及实体/角色/等等的spritesheets,所以它有可能找到一些内置此功能的框架 - PushbuttonEngine(http://pushbuttonengine.com/)弹出介意 - 但我认为在这一点上你已经取得了很大的进展,无法切换引擎。

您可能想要检查的一种策略是将每个tileset(或相关资产组)放入一个zip文件中,然后加载它。有许多很好的AS3库允许你解析Flash里面的zip文件,但nochump.com的实现可能是最好的:​​

这样你仍然可以模块化的方式工作,每次改变时都不必编译一个swf文件。您仍然需要在资产发生变化时解压缩/压缩资产,但这仍然比在Flash内部进行编译或在运行时单独加载所有资产要快得多(这可能会导致您的Web服务器中断,必须处理100个请求对于单个游戏会话)。另外,由于您在Flash中抱怨编译时间过长,请尝试以下操作:在Actionscript设置下,取消选中标记为“警告模式”的框。警告模式为编译器提供了有关非类型变量或重复变量等明显内容的警告,但关闭它可以真正减少编译时间。

我在做一个非常重要的项目时发现了这个,在禁用它之后,我从30秒到5秒来编译我的swf。

+0

很好的答案,谢谢。我已经考虑过框架,但切换已经太迟了,是的。我很抱歉:) Zip文件是个好主意,我会尝试使用该库。禁用警告模式也是一件好事,我已经做到了。 – 2011-06-10 08:23:35

+0

不错,请不要关闭警告。 *会*回来并咬你。 – grapefrukt 2011-06-10 08:25:29

+1

关闭警告有什么不利之处?我已经关闭了多年的警告,并且从未遇到任何问题。另外,如果您使用Flex/Flashbuilder或FDT等单独的IDE来编写代码,并将Flash本身作为最终编译器,那么您可以获得两全其美的效果:代码编辑器中的警告,以及资源编辑器中的快速编译。 – gillesv 2011-06-10 09:31:56

4

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

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

您可能想为此使用加载库,因为它不是很有趣的编码,我经常使用BulkLoader。这有点大,但它运作良好。

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

而且,请不要转动警告,它会导致你的方式更多的问题比它解决。

+0

+1我完全支持这个答案。如上所述,大多数Flash游戏网站不允许多个文件。 (虽然大3)使用嵌入的资产管理器类是我通常使用的。如果你的游戏打算成为一个文件,那就是要走的路。再次不要关闭警告嘿。太多人认为这越来越多。 – Feltope 2011-06-10 16:07:55

+0

嵌入也是很费力的方式来组织很多图像。我们将要有伪三维对象,其中1个对象由〜25个具有不同角度视图的图像呈现,并且可以有数百个对象。关于资产经理,幸运的是我想从一开始就创建并使用它,所以这里没有问题。我还创建了一个类似bulkloader的简单类,但正如我在后面写的那样,在远程服务器上运行时遇到问题。 – 2011-06-10 16:38:11

+0

创建并将它们嵌入为精灵表。试图嵌入吨的个人形象将是坚定的我同意你的看法。 – Feltope 2011-06-10 19:55:04