是否可以将链接到文档(也称为文档 Class)的 Class 放入 RSL 中并仍然将其作为文档 Class?

Is it possible to put a Class linked to a document (aka Document Class) into a RSL and still have it as Document Class?

首先,我的环境。我的问题是是否可以使用 Flash Professional 而不是 Flex、FlashBuilder 等(我目前没有这些环境)。


事情是这样的:我们有几个带有文档 Class 集的 .fla 文件。带有 class 的 .as 文件与所有这些 .fla 文件共享,因此它们都将相同的 class 设置为它们的文档 Class。关键是因为 Class 被编译到每个生成的 .swf 文件中,因此对 Class 所做的任何更改都需要重新编译所有 .fla 文件。

经过一些研究,我发现了 RSL。但我想知道是否可以将 class 作为 RSL 同时将其作为每个文件的文档 Class?它会简化一些事情,因为如果需要在 class 中进行更改,我们不需要重新编译每个文件,或重新生成每个 .swf 文件。

此外,如果可能的话,我如何通过 Flash Professional 实现 RSL?我找到的所有文档都表明通过 Flex 和其他人。

如果我不够清楚,请告诉我。

不可能,RSL 仅用于运行时共享而不用于编译时共享,您需要访问 class。

首先,一个 class 就大小而言并没有那么大,所以没有必要让它在 swf 之间唯一共享。

现在您确认如果您进行任何更改都必须重新编译所有 swf,但这实际上并不准确,因为在一个给定的运行时中只能存在一个 class 定义。默认情况下,第一个 swf 运行 是加载 class 定义的,所有加载的 swf 都会默认丢弃其 class 定义,因此您不必重新编译它们理论。

因此,如果您对 class 进行了重大更改但不进行较小更改,则要恢复是,您必须重新编译所有 swf。但这种情况是您的应用程序设计的症状,它可能不是最有效和合乎逻辑的。

如前所述,您不能将 RSL 用于文档 class。但是,您 可以 将 classes 放入 RSL 并在 运行 时间加载它们可能实现您想要的。

这是一个非常简单的例子:


1.创建 RSL 资产:

假设您有一个不时更改的 class,并且您想在 运行 时加载它的功能:

//TestyMcTestFace.as
package  {
    public class TestyMcTestFace {
        public static function go():String{
            return "I'm Testy McTestFace";
        }
    }
}

所以,您可以做的是在 FlashPro/AdobeAnimate CC 中创建一个新的 AS3 项目。 Link 上传你的 class 文件,以便你的项目找到它(在这种情况下,我只是将我的 TestyMcTestFace.as 放在与我创建的新 .fla 相同的目录中)。

在时间轴代码中引用您想要包含的 class(es)。 如果没有此引用,class 将不会在结果 swc/swf 中导出。

所以对于这种情况,我有一个新的 AS3 项目,在时间轴的第一帧上只有一行:

TestyMcTestFace;

现在,转到您的发布设置,只选中 Flash (swf)SWC

发布这个新项目(您现在有一个 swf/swc 可以用作其他应用程序的 RSL)。

2。设置您的其他应用程序以使用 swf/swc 作为 RSL。

在您现有的 Flash 项目中,转到“高级 Actionscript 设置”(单击发布设置中 "Actionscript 3.0" 旁边的扳手图标)。

单击库路径选项卡,单击加号按钮,然后单击“浏览到 SWC 文件”按钮(目前它是一个带有闪光灯 'f' 的图标它)。从上一步中找到您的 swc 文件。

现在,突出显示您的新条目,单击信息图标(链接选项)。将其从 "Merged into code" 更改为 "RSL"。然后添加 swf 文件的路径(此应用程序 运行s 时的路径)。

现在,在您的应用程序中,您可以从 RSL 中引用 classes。所以如果我们这样做:

trace(TestyMcTestFace.go());

您应该得到输出 "I'm Testy McTestFace"。

FlashPro 会自动为您加载 RSL。但请注意,如果您不让 Flash 自动预加载您的应用程序,它不会立即可用。

如果您在第一步中更改并重新导出了 swc/swf,那么当您再次 运行 现有的 swf 时应该会反映出这些更改(无需重新编译)。


注意事项:

注意 RSL 中的代码。很容易发生冲突 classes。作为最佳实践,仅将完全 standalone/de-coupled 的代码放入 RSL 中。应避免使用大量导入的代码。如果您在编译的 swf 中不引用与加载 RSL 相同名称的 classes,那也是最好的。

另请记住,如果 RSL 不是来自同一域,则可能会有 sanbox/security 限制。