【问题标题】:Right way to keep media resources for flash game为Flash游戏保留媒体资源的正确方法
【发布时间】:2011-09-12 07:05:00
【问题描述】:

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

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

因此,我正在寻找一种公认的、常见的和正确的方法来组织我的游戏资源,游戏开发人员使用这种方法,我可以学习和使用。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

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

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

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

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

    请永远不要打开警告,它会给你带来比它解决的问题更多的问题。

    【讨论】:

    • +1 我完全支持这个答案。如前所述,大多数 Flash 游戏网站不允许多个文件。 (虽然大 3 做)使用嵌入的资产管理器类是我通常使用的。如果您的游戏打算成为一个文件,那就是要走的路。再次不要关闭警告呵呵。越来越多的人提出这个建议。
    • 嵌入也是组织许多图像的一种非常费力的方式。我们将有伪 3d 对象,其中 1 个对象由大约 25 个具有不同角度视图的图像呈现,并且可以有数百个对象。关于资产管理器,幸运的是我想从一开始就创建和使用它,所以这里没有问题。我还创建了一个类似于 bulkloader 的简单类,但正如我在帖子中所写的那样,在远程服务器上运行它时存在问题。
    • 创建并嵌入它们作为精灵表。我同意你的观点,尝试嵌入大量单独的图像会很疯狂。
    • 如果你的加载类不能正常工作,这不是这个概念的问题,它会说它只是你代码中的某种错误。将其作为另一个问题发布,我们将帮助您解决它。
    • 至于生成嵌入标签,查看这篇博文:andymoore.ca/2011/03/embedding-assets-in-as3
    【解决方案2】:

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

    许多游戏使用图块来构建它们的关卡,并使用精灵表来构建实体/角色/等,因此可以找到几个内置此功能的框架 - PushbuttonEngine (http://pushbuttonengine.com/) 浮现在脑海中- 但我认为你在此时切换引擎的进展太快了。

    您可能想要检查的一个策略是将每个图块集(或一组相关资产)放入一个 zip 文件中,然后加载该文件。有很多好的 AS3 库可以让你在 Flash 中解析 zip 文件,但是 nochump.com 的实现可能是最好的之一:http://nochump.com/blog/archives/15

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

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

    我在处理一个资产非常重的项目时发现了这一点,在禁用它后,我从 30 秒缩短到 5 秒来编译我的 swf。

    【讨论】:

    • 很好的答案,谢谢。我已经考虑过框架,但是现在切换为时已晚,是的。我很抱歉 :) Zip 文件是个好主意,我会尝试使用那个库。禁用警告模式也是一件好事,我已经做到了。
    • 拜托,不要关闭警告。那回来咬你。
    • 关闭警告有什么缺点?我已经关闭警告多年了,从来没有遇到过问题。此外,如果您使用单独的 IDE(如 Flex/Flashbuilder 或 FDT)进行编码并将 Flash 本身作为最终编译器,您可以获得两全其美:代码编辑器中的警告和资产编辑器中的快速编译.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2010-12-11
    • 1970-01-01
    • 2011-11-19
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多