2

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


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

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

此外,如果可能的话,我如何通过 Flash Professional 实现 RSL?我找到的所有文档都通过 Flex 和其他文档显示了这一点。

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

4

2 回答 2

1

正如已经指出的,您不能将 RSL 与文档类一起使用。但是,您可以将类放在 RSL 中并在运行时加载这些类,可能会实现您想要的。

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


1. 创建 RSL 资产:

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

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

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

在时间线代码中添加对要包含的类的引用。如果没有这个引用,类将不会在生成的 swc/swf 中导出。

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

TestyMcTestFace;

现在,转到您的发布设置,并使其仅检查Flash (swf)SWC

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

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

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

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

现在,突出显示您的新条目,单击信息图标(链接选项)。将其从“合并到代码”更改为“RSL”。然后添加 swf 文件的路径(该应用程序运行时的路径)。

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

trace(TestyMcTestFace.go());

你应该得到输出“I'm Testy McTestFace”。

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

如果您从第一步更改并重新导出了 swc/swf,则这些更改应在您再次运行现有 swf 时反映出来(无需重新编译)。


注意事项:

小心 RSL 中的代码。很容易获得冲突的课程。作为最佳实践,仅将完全独立/解耦的代码放入 RSL 中。应避免包含大量导入的代码。如果您在加载 RSL 的编译 swf 中不引用具有相同名称的类,那也是最好的。

还要记住,如果不是来自同一个域,RSL 可能会有 sanbox/安全限制。

于 2016-05-20T22:10:20.087 回答
1

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

第一件事是,一个类在大小方面并没有那么大,所以没有必要让它独一无二,在 swfs 之间共享。

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

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

于 2016-05-20T20:28:22.647 回答