我们正在开发一个史诗游戏使用flash cs5和ActionScript3(没有任何弹性)。库中有许多我们需要使用的图像和其他媒体内容。早期我只是将它们保存在我的主.fla中,但后来编译swf变得非常慢(更多的图像-更多的时间来编译)。所以我把我所有的镜像放到闪存之外的文件系统中,这很有帮助。但随后出现了一些延迟和错误,特别是当我们在远程服务器上测试游戏时。看起来文件没有时间加载(或者加载不完整)--尽管我使用onload等事件按顺序正确地完成了加载。
最后,我创建了另一个包含所有图像和资源的swf。我在我的主swf中加载它一次,只有当我需要添加新图像时才编译它。它工作得相当好,但我觉得我做错了,或者有另一种更容易组织资源的正确方法。第二个swf也有一些小问题;例如,我必须让用户等待,直到它加载到我的第一个文件中,如果我想从我的桌面运行,我必须始终将这两个文件放在一个地方。而且,随着图像数量的增长,重新编译我的第二个swf变得很烦人,即使我不需要经常这样做。
因此,我正在寻找一种公认的、常见的、正确的方法来组织我的游戏资源,供游戏开发人员使用,以供我学习和使用。
发布于 2011-06-10 16:33:13
您需要做的是构建一个资产管理器类(或多个类)。这个类应该处理所有资产的加载,这样您就可以轻松地更改加载它们的方式,而不必到处进行更改。
合理的开发方法是从外部加载文件,您可以轻松地替换它们,如果您在团队中工作,则不必处理主.fla文件上的冲突问题。(这意味着每个文件都是独立的,而不是单一的swf资产)
你可能想要使用一个加载库,因为它的编码不是很有趣,所以我经常使用BulkLoader。它有点偏大,但工作得很好。
但是,在部署到服务器时,根据游戏类型的不同,将所有这些文件放到服务器上可能有点麻烦。许多flash游戏网站甚至不支持多个文件,而是更喜欢一个巨大的.swf。此时是您的资产加载类大放异彩的时候了,因为它都是由一个类包装的,所以您可以更改它的内部工作方式以使用.zip文件,或者如果您想要单个文件,[Embed]标记(需要mxmlc编译器,但它非常容易设置)
还有,请不要使用警告,它会给你带来比解决问题更多的问题。
发布于 2011-06-10 16:03:27
flash开发人员可以通过多种方式为游戏组织资源,但最好的方法取决于您正在开发的游戏类型。
许多游戏使用tiles来构建它们的关卡,使用spritesheets来构建实体/角色/等等,因此可以找到几个具有此功能的框架-内置PushbuttonEngine (http://pushbuttonengine.com/) springs但我假设您已经在这一点上取得了太大进展,不能切换引擎。
您可能想要检查的一种策略是将每个磁贴集(或相关资产组)放入一个zip文件中,然后加载该文件。有许多优秀的AS3库可以让您在闪存中解析zip文件,但nochump.com实现可能是最好的:http://nochump.com/blog/archives/15
这样,您仍然可以以模块化的方式工作,而不必每次发生变化时都编译swf文件。你仍然需要在任何时候有变化的时候解压/压缩你的资产,但这仍然比在Flash中编译或在运行时单独加载所有资产要快得多(这可能会杀死你的100服务器,不得不为一个游戏会话处理100个请求)。
另外,既然你抱怨Flash的编译时间太长,试一试:在Actionscript设置下,取消选中标记为“警告模式”的复选框。警告模式给你的编译器警告明显的东西,如无类型变量或重复变量,等等。但是关闭它确实可以减少编译时间。
当我在一个非常耗费资产的项目上工作时,我发现了这一点,在禁用它之后,我花了30秒到5秒来编译我的swf。
https://stackoverflow.com/questions/6303273
复制相似问题