1

堆栈

我在设置一个新项目(电子学习)时遇到了一些麻烦,我认为该项目将从 RSL 中受益匪浅。
我的情况是这样的:

Main.fla - A Shell
Scenes.fla - 我稍后会解释这个
Navigation.fla - 某种 GUI
大量 Fla 文件- 课程

Main将是第一个被实例化的电影,然后,从这里开始所需的一切都是download

除了“架构”(即 Main、Scenes、Navigation 和一整套称为Engine的类)之外,每节课都将放在 fla/swf 中,并将在运行时添加到 Scenes 中。

Engine 负责处理重复和必要的任务、事件、常用方法、与服务器的通信等。

导航负责处理用户输入,如导航(下一课/上一课等),然后将其传递给引擎,该引擎将操纵场景(以及它的孩子)。

好吧,我也有一些限制:
将交给我们的客户的每个 swf 文件都需要小于 80kb,这意味着我被束缚了。
我无法将整个内容编译为准备交付的包。

由于尺寸很重要,我需要尽可能减轻负载的方法。
所以,这些天我搜索了很多,发现了RSL。
我创建了一些测试以更好地了解如何使用它,当然,我陷入了陷阱。

我无法正确设置我的 Flash,“库路径”(在 AS3 配置下)没有任何成功,无法在 SWC 中编译类......

另一件事是我不会上课,只会上课。
这些课程将由根本不了解 AS3(OOP 或程序逻辑)的人创建。
而且我不倾向于将整个引擎(源代码)交付给可能会弄乱它的外部任何人,从而制作整个应用程序(应用程序,事实上,我们将产生数百个电子学习)。

我真的认为我在某些事情上需要帮助(时间在流逝):

如何有效地使用 RSL
如何在 SWC 中捆绑类
如何将所有必要的东西打包在 SWC 中,然后只交付这个 SWC

我知道这个帖子有点长,而且我问了很多事情,但我现在已经用键盘敲打了一个星期,并且无法管理设置。

感谢您的关注...
NemoStein

4

1 回答 1

1

从 fla 有两种方法可以做到这一点

一个是导出整个库。转到您的发布设置,选择 Flash only,然后Export SWC在 Flash 选项卡下选择

http://img593.imageshack.us/img593/8296/swc.png

另一种是右键单击库中的项目并选择导出 SWC。如果您对有大小限制的项目有疑问,这可能是要走的路,但否则我建议您导出整个库

向资产添加链接 ID 很重要。您可以通过库中的链接 ID 列或编辑符号属性来输入此信息。

这些 ID 必须是唯一的,因为这些是您调用它们的类的名称。创建一个公共前缀是一个好主意,因此它们不太可能干扰其他类。

http://img827.imageshack.us/img827/7820/linkageid.png

编译资源后,您可以将它们添加到项目的运行时库文件夹中,也可以通过设置或嵌入标签将它们一一嵌入。我使用 FlashDevelop 这很容易,不确定您使用的是什么,但我确信该选项存在并且易于访问。


使用库。

我一直在做什么来加载资产(运行时的 swf) 为什么 run-tim swfs ?好吧,如果您正在为内容编译引擎,那么您真的无法将引擎分开。这个想法是首先加载引擎,然后加载告诉它如何处理库以及在哪里找到每个库的配置。

我的设置/设置简化是这样的

我有一个默认配置 xml 文件,其中添加了库。出于我的目的,我知道预期的库,所以我有带有预定义 ID 的 xml 标记,如下所示:

在代码方面,我会将库的名称/类型定义为常量静态,并将它们全部放在另一个常量中,即数组。在我的数据类 const static var TYPE_COMPONENTS:String = "components"; const static var TYPE_INTERFACE:String = "interface"; const static var TYPES:Array = [TYPE_COMPONENTS,TYPE_INTERFACE];

一旦我加载了 confg xml,就可以一个一个地遍历子节点,看看它们是否与我的 TYPES 数组下的任何项目匹配。我将所有匹配项放在组加载器中(http://as3.casalib.org/docs/org_casalib_load_GroupLoad.html)我还将所有资源放入字典数组中,以便我可以通过我定义的静态变量进行资产(数据.TYPE_INTERFACE)

然后我等待加载完成。

加载资产后,我使用 getLoader(Data.TYPE_INTERFACE)。getDefinition ( myClassName) 创建类

hasDefinition有助于检查类是否存在而不抛出错误

您需要知道类名是什么来调用它,我使用另一个 XML 文件来定义要查找的类以及如何处理它们。

我手动生成 XML 文件,有时需要提醒自己有哪些选项,但可以创建一个可以生成这些文件的 AIR 应用程序。因为我使用 swf 作为在 pc 上运行的引擎,所以无法像使用服务器端技术或 AIR 那样找到子文件夹中存在的库,因此 XML 是必需的。

希望这可以帮助

于 2011-02-08T21:27:18.603 回答